• ベストアンサー

Excel VBAのコード

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

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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な方法はありますでしょうか? 空白行  → 存在しない前提です。 よろしくお願いします。

関連するQ&A

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • EXCEL VBAでたくさんのURLの一覧からHTTPレスポンスコードを取得したい。

    VBA初心者です。 EXCEL VBAでプログラミングの練習をしています。 シート名:一覧 URL記入セル:A1~A100 結果を記入するセル:B1~B100 があり、URL記入セルに入力されているURLにアクセスし レスポンスコードを(404とか200とか)B列に書き出す というのを実行できるコードの書き方を教えてください。 (1週間取り組んでいますがまだできません・・・) サンプルコードを直接改定頂けると最高です。 宜しくお願いします。

  • "VBAの繰り返し"についてお尋ねします。VBA初心者です。

    "VBAの繰り返し"についてお尋ねします。VBA初心者です。 例えば「A列の最後のセルに何か入れば、その行のB列、C列・・・の一つ上のセルに入っている計算式を繰り返しコピーする」と言うコードを教えていただけたらと思います。A列の最後のセルに何か入ってくれば、その行の一つ上のセルに入っている計算式を繰り返しコピーするというコードです。コード記述の例を教えていただけたらと思います。よろしくお願いします。

  • エクセル、VBA、抽出複数検索について

    エクセル、VBA、VLOOKUP、MATCH関数等について出来る方法があれば教えてください。 インチごとに分けてあるシートがあり、(在庫表です) これを参照して、別ブックへVLOOKUP等を使って、サンプルデータのシート4のように表示させたいのですが、 何か方法を使って出来ることは可能でしょうか? 問題点が複数あります 1、VLOOKUPの範囲について、B列が結合されていて、C列は複数行あるため、商品名が入ってきません。 C列については、何千件とデータがあるため、結合することは不可能です。 一致している条件としては商品コードが必ずあり、商品名には「/」が入っております。 =CONCATENATEとVLOOKUPは一緒に使うことは可能ですか? もしくはINDEX関数やIF、SUMPRODUCT等を使うのでしょうか? シート4のような形に出来る方法があれば、教えてほしいです。 VBAは詳しくはないのですが、VBAで出来るのであれば、教えてほしいです。 在庫表はとても作り方が悪いのですが、これを作り直すと言うことは、不可能です。 グループ会社で使っているため、なんとかこの在庫表を使いたいです。 VBAでA列をA5からA100にコードのみ入れた場合、B列に商品名が入るようにVBAで作ることは可能でしょうか? もしくは、検索条件を2つ使って、一つは商品コード完全一致+あいまい検索で【/】で商品名を入れることは可能でしょうか? 関数は調べたのですが、関数では難しいのかなと思います。 宜しくお願い致します。

  • VBAで「Shift+ctrl+↓」のようなコード

    毎度お世話になっております。 VBA初心者です、下記の内容お教えください。 Sub Sample02_3() Dim cnt As Long cnt = WorksheetFunction.CountIf(ActiveSheet.Range("A1:A11"), "") MsgBox "空白は、" & cnt & "件です。", vbInformation End Sub のようなコード A1からA11のセルの中から空白を数えるマクロを作成しました。 ただこの場合だとワークシート上で検索範囲がA12以降に増えた場合 ・A12以降を数えません。 ・列全部を範囲にした場合、表外の空白まで数えてしまいます。 手動でやる場合は 検索列先頭で「Shift+ctrl+↓」でデータの途切れるセルまで選択をするのですが VBAマクロでこれを自動でやることは出来ないでしょうか?。 以上宜しくお願いいたします。

  • VBAのコードがエラーになってしまいます。(エクセル)

    ある表のある項目が空白以外(つまり、在庫がある)のものを オートフィルターで抽出して、その中の該当列のみコピーするマクロを 記録と修正をして書きました。 初めはきちんと動いていたのですが、今日になって急に 「Selection.Copy」のところでエラーが出てしまうようになったんです。 エラーコメント: 実行時エラー‘1004': そのコマンドは複数の選択範囲に対して実行できません。 ・・・・と出たときに、デバッグすると、「Selection.Copy」の 1行が黄色くなっていて、該当箇所になっています。 コード: Selection.AutoFilter Field:=19, Criteria1:="<>" '検索 Range("A8:C1000,G8:I1000,J8:L1000").Select Selection.Copy 作業自体は、複数の選択範囲に対して実行できる(コピーできる)し、 今まで動いていたのに??と、なにがいけないのかわからないので、 どうか教えていただきたいと思います。 VBAは勉強始めたばかりで、この部分だけが問題なのか わかりません。補足をしますので、どうかよろしくお願いします。 Excel2000を使用しています。

  • Excel2007VBA ブックのアクティブ化

    ●質問の主旨(2点) 1.以下のコードは、なぜエラーが返されるのでしょうか? 2.タスクバーにあるアクティブ状態ではないブックの1枚目シートを 選択するためには、以下のコードをどのように書き換えれば良いでしょうか? ●質問の補足 タスクバーにはエクセルブック「Book1」と「Book2」を表示させ、 「Book1」の「sheet1」がアクティブになっています。 Book1の標準モジュールに以下のコードを記述しています。 Sub sample1() Workbooks("Book2.xlsx").Activate Worksheets("sheet1").Select End Sub しかし実行すると「実行時エラー9インデックスが有効範囲にありません」と エラーが返されます。なぜそうなるのかが分かりません。 ご存知の方がいらっしゃればご教示よろしくお願い申し上げます。 私はVBA初心者です。

  • エクセル VBAコードの書き方を教えてください。

    エクセル VBAコードの書き方を教えてください。 今回は、VBAで掛け算をしたいのですが、 コードが間違っているためか実行ができません。 VBAコードのどこに不備があるか教えてください。 <条件> *最終行(H列で判断)を選択し、  I2(2行、I列)~I最終行(最終行,最終行のI列)までの  範囲を計算したい。 *たとえば、I2であれば、F2×G2×H2×0.01の値を代入したい。  I最終行であれば、F最終行×G最終行×H最終行×0.01の値 EX) 添付ファイルの場合、I2=500、I4=125、にしたい。 <参考> Sub SURYO() Dim r As Long With Sheets("Sheet1") For r = 2 Cells(r,9).value = Cells(r,6) * Cells(r,7) * Cells(r,8) Next End With End Sub よろしくお願いします。

  • VBAでエクセルのバージョンを取得するには

    エクセルBOOKを開いているアプリケーションがエクセル2007以降かそうでないかを、その開かれているBOOKのVBAで取得するにはどのような記述をすればよろしいでしょうか? 2007以降か、その前かでコードを分岐させたいのです。 よろしくお願いします。

専門家に質問してみよう