Excelのアクティブセルの移動とデータの取得方法についてご教授ください。
=====現状のコード=====
_ApplicationPtr pXL;
RangePtr pRange = pXL->ActiveCell;
======================
上記でpRange->Value2によるアクティブセルの値の取得が可能です。
これを、次の行のセルの値の取得方法が分かりません。
お手数ですが、次の行のセルをアクティブにする方法をご教授ください。
(移動できればpRange->Value2で値の取得は可能と認識しております。)
(例)
A1セルをアクティブにした状態でA2セルへ移動し、A2セルをアクティブにする。
アクティブにしなくてもシートオブジェクトからレンジオブジェクトを取得すればいいの
では?
_WorksheetPtr pSheet = pXL->ActiveSheet;
RangePtr pRange = pSheet->Range[A1]
参考
Visual C++ Excel操作編
http://www.ujasiri.com/prglib/vc/vc.html
ご回答ありがとうございました。
説明不足でしたが、実施したいこととしましては、セル固定でのデータ取得ではなく、任
意のデータを取得しようと思っています。
つまり、
①ある文字列で検索
②検索にヒットしたセル位置から、その列にある文字列を順に取得
例)AAAという文字列がA1セルでヒットした場合は、
A2~A100セルの文字列を順に取得していく。
ということです。
提案いただいたコードではA1セル固定での指定となるため、そこが任意の場合にどうすれ
ばよいかご教授ください。
シート内の検索
http://www.ujasiri.com/prglib/vc/excel/import/xls_imp_find_exp.html
見つかったRangeオブジェクトからOffsetメソッドで対応できるかな。
とりあえず、全く手掛かりがつかめないのであれば、
Excelのマクロの記録を使って、VBAのコードで大体どのような関数を使えばよいのか
つかめるので、そこからC++用に変換するほうがよいでしょう。
(マクロの記録
↓
VBAのコードを整形
↓
C++用に変換)
ありがとうございました。
マクロ実行したコードからC++に変更しようと思いましたが、
マクロではセルを移動してもVBコードしては出力されませんでした。
もう少し調査したいと思います。
アクティブセルを移動したいのなら、Blueさんが書いている通りOffsetを使用すればよ
いでしょう。
RangePtr pRange = pXL->ActiveCell;
pRange->Offset[1][0]->Activate(); // 次行ならOffsetY[1]でもいいかも?
セルの値を取得したいのであれば、セルをアクティブにする必要はありません。
オフセットを指定してValue2で取得・設定(get/set)ができます。
VARIANT value = pRange->Offset[1][0]->Value2;
> 提案いただいたコードではA1セル固定での指定となるため、そこが任意の場合にどう
すれ
> ばよいかご教授ください。
質問内容が変わっているようですが、元々はアクティブセルの次をアクティブにする
ことが目的だったように思われます。Blueさんは
> RangePtr pRange = pXL->ActiveCell;
の代わりに
> RangePtr pRange = pSheet->Range[A1]
としたわけで、そこは質問の範囲ではないと判断したものと思われます。
「任意」のセルからの相対位置を指定したいならOffsetを使用すればよいので、
その「任意」の位置の指定方法は元の質問では
> 例)
> A1セルをアクティブにした状態でA2セルへ移動し、A2セルをアクティブにする。
となっていたわけで、任意のセルではなかったはず。
あ、ぼけてる。
blueさんの回答は二つに分かれているのがごちゃごちゃになっちゃった。
前回の後半は無視してください。