• ベストアンサー

Excel VBAのコード

こんにちは。 現在VBAの操作を学習中ですが、思ったように進まず困っています。 次のことを行うには、どのように記述したら良いでしょうか? <やりたいこと>  ・Book1にデータ表があり、ヘッダーから“hoge”という列を見つける  ・“hoge”列を先頭にして、Book2の指定範囲へコピーする できれば、サンプルコードをご記入いただけると助かります! よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

この質問はマクロの記録を採って考えれば、磁力自力で、もっと焦点を絞れるはず。 丸投げになっている<-サンプルコードをご記入いただけると・・ 他のUNIXなどの人はHogeなんか使うが、もっと具体的な例を挙げて、質問の記述にすること。 ヘッダーーー>エクセルでは別のれっきとした意味がある。「項目見出し文言」のことだろう。第1行とは限らないだろう。 >“hoge”列を先頭にして、Book2の指定範囲へコピーする 「先頭にして」が、あいまい。その列だけで良いのか?それより以右の列なのか。 ーー マクロの記録では Sub Macro4() Workbooks.Open Filename:="C:\Documents and SettingsXXXX\My Documents\YYYYY.xls" _ , UpdateLinks:=3 Range("D1:E19").Select Selection.Copy Windows("Book1").Activate ActiveWindow.WindowState = xlNormal Range("A1").Select ActiveSheet.Paste Columns("B:B").EntireColumn.AutoFit End Sub ーーー Range("D1:E19").Selectは質問では1列だけかもしれないが。 この例の("D1:E19").のD列を割り出す方法は Sub test01() c = WorksheetFunction.Match("使用者", Range("a1:h1"), 0) MsgBox c End Sub をやってみれば良い。Findメソッドで列を見つける方法のあるが、こういう関数を使う方法もある。 「使用者」の部分は質問でいうHogeでしょう。列数字で返るから 範囲指定は、Range(Cells(i,j),cells(k,l)) のような書き方になるかも。 ーー また関係するシートが2つに渉るので、それを区別する書き方が必要かもしれない。 ーー D19の示す最下行を求める方法はVBAの常識で、 Googleで「vba 最下行 取得」で照会し http://okwave.jp/qa/q1782196.html など読むこと。

v-O_O-v
質問者

お礼

他の方からもご指摘がありましたが、もっとわかりやすい質問ができるよう気をつけたいと思います。 教えていただいた、類似質問の検索やマクロの記録と比較する方法で、もう少し頑張ってみます!

その他の回答 (2)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

学習中ということで ・Book1にデータ表があり、ヘッダーから“hoge”という列を見つける 1行目のどこかに hoge と入っている ・“hoge”列を先頭にして、Book2の指定範囲へコピーする Book2のSheet1のA列に入れる ということだとして Sub Test() c = Rows("1:1").Find(What:="hoge").Column MsgBox c & "列目に hoge という文字がありました" Workbooks("Book2").Sheets("Sheet1").Columns("A:A").Value = ThisWorkbook.ActiveSheet.Columns(c).Value MsgBox "Book2のSheet1の1列目に、その列の値を入れます" End Sub をお試しください。 エラー処理はなしです。

v-O_O-v
質問者

補足

早速ありがとうございます。 試したところ、うまくいきました! 説明が足りていませんでしたが、 コピー先のBook2の1行目が固定されていた場合、 2行目以降にコピーさせることはできるでしょうか?

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

<分からないこと> ・「ヘッダー」って何?一行目のこと? ・検索対象のシートは複数 or単数? シート名は? ・「“hoge”という列」というのはセルの値は「“hoge”」という意味? ・「Book2の指定範囲」というコピー先の指定範囲はどのように与えられるの? ・book1側のデータがbook2の指定範囲を超える場合はどのようにするの? ・後、空白行の取り扱いとかいろいろ

v-O_O-v
質問者

補足

説明不足ですみません。 ヘッダー  → 1行目のことです。 検索対象 → 1枚で、シート名“DATA”です。 hoge    → セルの値がhogeです。 指定範囲 → Book2のNEWDATAシートの、C3セルを先頭にしたいです。 範囲を超えるとき → 考えていませんでした!超えてもOKな方法はありますでしょうか? 空白行  → 存在しない前提です。 よろしくお願いします。