• ベストアンサー

VBAで列名で判定して列データを取得したい。

Exel2003のマクロで特定の列データを別のシートに貼り付けたいのですが。 初めて、BVAを触るのでどのような命令があるのかさえ把握しきれてません。 流れとしては、以下でよいのでしょうか? (1)列名で判定して列を特定する (2)(1)で特定した列のデータを取得する それとも、一発で出来る関数があるのでしょうか?

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 「特定の列」の条件が判らなければ、列の特定ができませんので、やり方だけ・・・ Sheet1の1行目が項目行になっていて、列方向に色々な項目が入っているとします。 その中の一つの項目をSheet2のA列にコピー&ペーストするコードです。 Alt+F11キー → VBE画面が出ますので画面左下にある「This Workbook」をダブルクリック →  ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim j As Long Dim str As String Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") Set ws2 = Worksheets("sheet2") str = InputBox("抽出したい項目名を入力") If WorksheetFunction.CountIf(ws1.Rows(1), str) Then j = WorksheetFunction.Match(str, ws1.Rows(1), False) ws1.Columns(j).Copy Destination:=ws2.Cells(1, 1) Else MsgBox ("検索項目がありません。") Exit Sub End If End Sub 'この行まで ※ あくまでたたき台ですので、条件等が具体的に判ればもっと適切な回答が得られると思いますよ。 この程度で失礼します。m(_ _)m

その他の回答 (2)

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

初心者だろうに、データ実例も挙げて、質問しないから、何のことを言って居るか、正確にわからない。聞くほどのことでもないと効いていることの予想が難しい。 >特定の列 B列とかC列とか考えるのか? その他の指定なのか。例えばデータの最も右の列をとらえたい、なんていうのもあるのだ。 まず単数列か複数列かが肝心。 Range(”A1:B10”).Copy 貼り付けも含めて、の書きかたは Sub test02() Range("A1:A10").Copy Range("H1") End Sub ーー Sub test02() Range("A1:B10").Copy Range("H1") End Sub のようにかけるが、質問者のセルの指定はどうしようとしているのか。 >初心者は「特定の」が好きだが、むしろ、A列の1行目から10行目までとか、1つの場合の記述で説明して、質問し、回答に対し、質問者が類推を働かせて、実際の質問者の場合のコードを作り上げるほうがよかろう。 ーー ここへ質問して有効なのは、VBAの初級を卒業してから。 それまでは、解説書を繰り返し読むか、スクールへ通うこと。 ーー 二ーズがまずあって、勉強もしてないのに、当たろうとしても無理です。 職人仕事でも、初めは、そばで付いて指導する人が必要でしょう。どうしてプログラムだけは、聞いて何とかなるように思うのか。 VBAはすべて他人(マイクロソフト)が作った約束事なのに、ほとんど覚えるほか無いのに。

akaginoyama
質問者

お礼

質問が抽象的で失礼いたしました。 皆様から教えていただいたコード内の命令を一つずつ調べております。 一つずつ動作を確認して時間が掛かってますが。 ほぼ実現できそうです。 本来は基本から勉強するべきでしたがやっつけでこれ1本の急ぎと言う 現実があり不躾な質問申し訳ありませんでした。 質問の回答は、ほぼ得られたました。 あまり、情報が増えると処理しきれないので解決とさせていただきます。 皆様のコードが参考になったのにベストアンサーは1人さましか選べないのが残念です。 お許しください。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

たとえば目的の列が「必ず1つある」のか「1つもない場合もある」のか「該当する列は実はいくつもある」のか,そういったそもそもアナタの実際のデータがどうなっているのかを,ご自分で一番によく把握しなくては始まりません。 また「判定」とは一体全体具体的にどういう事なのか,たとえば「データの完全一致」なのか,それとも「セルに色が塗ってある」だとかそういう事を見たいのかといった,「アナタのヤリタイことは一体何ですか」というのもご自分でキチンと理解してからでないと,何も出来ません。 作成例: sub macro1()  dim h as range ’探す  set h = range("1:1").find(what:="abc", lookin:=xlvalues, lookat:=xlwhole) ’見つからないときは終了する  if h is nothing then   msgbox "NOT FOUND"   exit sub  end if ’コピーする(とりあえず1列)  h.entirecolumn.copy destination:=worksheets("Sheet2").range("A1") end sub

関連するQ&A