今だけ人気マンガ100円レンタル特集♪

こんにちは。
エクセルVBAについて質問させていただきます。
やりたいことが複雑な為自分ではどうしようも出来ず、アドバイスを頂けたらと思います。

シート”ロット管理”にはC3~の行でロット名の一覧が入力されており、B4~B216で作業一覧が登録されています。

シート”工程詳細”には現状生産しているロットの工程の情報が、1ロット8列使用した表のような形で登録されており、1つ目の場合は、F3がロット名、F9~F220が作業一覧、H9~H220が進捗となって入っております。

今回行いたいことが、”工程詳細”を検索し、現状進行しているロットの進捗を”ロット管理”に値のみ転記していきたいと思っています。

※ただし、2つのシートの作業一覧は、全く同じ内容が登録されていますが、”工程詳細”は必ずしも作業一覧のAから始まるわけではありませんので、必ず作業一覧を照合する必要があります。

VLOOKUPのような形で検索、抽出を考えていましたが、VBAでのやり方が調べても難しく、分かりづらいと思いますが、できればお力添えをお願いします。

「【VBA】 別シートを検索し、一致した値」の質問画像

A 回答 (1件)

こんにちは!



画像が小さすぎて詳細がよく判らないのですが、
シートがたくさん存在するみたいですね。
その中の「ロット一覧」シートと「工程詳細」シートの二つだけを考慮すれば良いのですよね。

おそらくこういうコトだと思うので・・・

標準モジュールです。

Sub Sample1()
 Dim i As Long, c As Range, wS As Worksheet
  Set wS = Worksheets("ロット管理")
   With Worksheets("工程詳細")
    For i = 9 To .Cells(Rows.Count, "F").End(xlUp).Row
     Set c = wS.Range("B:B").Find(what:=.Cells(i, "F"), LookIn:=xlValues, lookat:=xlWhole)
      If Not c Is Nothing Then
       If c.Offset(, 1) <> "" Then
        .Cells(i, "H") = c.Offset(, 1)
       End If
      End If
    Next i
   End With
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QエクセルVBAで、条件に一致するセルへ移動

 エクセルVBAでシート内を検索し、条件に一致するセルを選択させたいのですが、どのようにしたら良いでしょうか?
 同一データはシート内に一つしか無い前提です。
勉強不足ですみませんが、どなたかご教授お願いします。

Aベストアンサー

こんにちは。maruru01です。

Findメソッドがいいでしょう。
こんな感じ


Dim rg As Range

Set rg = ActiveSheet.Cells.Find(What:="検索文字列")
If rg Is Nothing Then
  MsgBox "シート内には見つかりませんでした。"
Else
  rg.Select
End If


Findメソッドの詳細は、VBAのヘルプを参照して下さい。

Qエクセル VBA find は別シートを検索できますでしょうか?

こんばんわ。マクロ初心者です。
皆さんいつも親切なご回答ありがとうございます。

早速ですが質問内容を記入いたします。

・ブックA を開いています。
選択している行のC列セルの値を検索キーワードにして、
ブックB 内を検索し、検索結果のセルの3つ左のセルの値を、
ブックA で選択していたセルの同じ行のO列(15列目)に入力したいです。
※ブックBをアクティベートする事無く行えますでしょうか?
(他の処理と組合わせて行い、回数も多いので、
 ブックA⇔ブックB アクティベートの往復は避けたいです。)

下のようなマクロを作成してみましたがうまくいきません。
どうかご指導よろしくお願いいたします。

---------------------------------------------------------------
dim 検索品目 as string
dim fcell as object
dim i as integer
i = Selection.Row

'選択行の3列目セルの値を変数『検索品目』に格納
検索品目 = Cells(i, 3).Value

'オブジェクト変数『fcell』に検索したセルを格納
Set fcell = Cells.Find(What:=検索品目, After:=Workbooks("ブックB.xls").Worksheets("sheet1").Range("G2"), LookAt:=xlWhole, searchorder:=xlByColumns)

'検索したセルの3行左のセルの値を変数『オーダ番号』に格納
オーダ番号 = fcell.Offset(, -3).Value

'ブック A の選択行の15列(O列)にデータ入力
Cells(i, 15) = オーダ番号

こんばんわ。マクロ初心者です。
皆さんいつも親切なご回答ありがとうございます。

早速ですが質問内容を記入いたします。

・ブックA を開いています。
選択している行のC列セルの値を検索キーワードにして、
ブックB 内を検索し、検索結果のセルの3つ左のセルの値を、
ブックA で選択していたセルの同じ行のO列(15列目)に入力したいです。
※ブックBをアクティベートする事無く行えますでしょうか?
(他の処理と組合わせて行い、回数も多いので、
 ブックA⇔ブックB アクティベートの往復は...続きを読む

Aベストアンサー

>下のようなマクロを作成してみましたがうまくいきません。
どううまく行かないのか、エラーがでるのであれば
どの行ででるのかも記されると良いと思います

Findの使用方法をちゃんと理解できていないようですね
初心者にはFor~Nextの方が使いやすいのではと思います
あと、何(book、sheetなど)を対象に処理をしているのかを明確にされた方が良いと思います
これを踏まえて、コードを変更してみました

Sub test()

Dim 検索品目 As String
Dim オーダ番号 As Integer
Dim i As Long
Dim x As Long

i = ActiveCell.Row

'選択行の3列目セルの値を変数『検索品目』に格納
With Workbooks("ブックA.xls").Worksheets("sheet1")
検索品目 = .Cells(i, 3).Value
End With

'for~nextを使用した検索
With Workbooks("ブックB.xls").Worksheets("sheet1")
For x = 2 To .Range("G65536").End(xlUp).Row
If .Cells(x, 7).Value = 検索品目 Then
'検索したセルの3行左のセルの値を変数『オーダ番号』に格納
オーダ番号 = .Cells(x, 7).Offset(, -3).Value
Exit For
End If
Next
End With

'ブック A の選択行の15列(O列)にデータ入力
With Workbooks("ブックA.xls").Worksheets("sheet1")
.Cells(i, 15) = オーダ番号
End With
End Sub

参考まで

>下のようなマクロを作成してみましたがうまくいきません。
どううまく行かないのか、エラーがでるのであれば
どの行ででるのかも記されると良いと思います

Findの使用方法をちゃんと理解できていないようですね
初心者にはFor~Nextの方が使いやすいのではと思います
あと、何(book、sheetなど)を対象に処理をしているのかを明確にされた方が良いと思います
これを踏まえて、コードを変更してみました

Sub test()

Dim 検索品目 As String
Dim オーダ番号 As Integer
Dim i As Long
Dim x As ...続きを読む

Q複数条件が一致で別シートに転記【エクセルVBA】

エクセルでセルの条件が複数一致したら別シートに転記される方法をお教えください。
シートを2枚用意して、配達日ごとに一覧化したいのです。
事前に用意したシート(配達表)の“配達”と“配達時間”が一致したら
その方の名前と注文個数を右側に反映したいのですが・・・

注文データが多すぎて困っています。
宜しくお願いします。

■シート名:注文データ
   A    B    C    D    E
------------------------------------------------
1 しめい  対応   配達日   時間   個数
------------------------------------------------
2 たけだ  配達  6/20(月) 13:00  2個
3 みうら  配達  6/18(土) 14:00  4個
4 らもす  郵送  6/20(月)  ―   5個
5 いはら  配達  6/20(月) 14:30  8個
6 かつや  配達  6/20(月) 15:00  6個
7 みうら  郵送  6/20(月)  ―   4個

■シート名:配達表
    A     B    C
------------------------------------
1  配達   6/20(月)
------------------------------------
2  12:00
3  12:30
4  13:00
5  13:30
6  14:30
7  15:00
8  15:30
9  16:00

マクロを実行すると・・・
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

■シート名:配達表
    A     B    C
------------------------------------
1  配達   6/20(月)
------------------------------------
2  12:00 
3  12:30
4  13:00    たけだ   2個
5  13:30
6  14:00    みうら   4個
6  14:30   いはら   8個
7  15:00   かつや   6個
8  15:30
9  16:00

エクセルでセルの条件が複数一致したら別シートに転記される方法をお教えください。
シートを2枚用意して、配達日ごとに一覧化したいのです。
事前に用意したシート(配達表)の“配達”と“配達時間”が一致したら
その方の名前と注文個数を右側に反映したいのですが・・・

注文データが多すぎて困っています。
宜しくお願いします。

■シート名:注文データ
   A    B    C    D    E
------------------------------------------------
1 しめい  対応   配達日   時間   個数
-...続きを読む

Aベストアンサー

こういうのは「複数条件による抜き出し問題」だ。
関数で出来ればおなじみのやり方で良いのだが、既に出ているように式が長く複雑で、初心者には何をやって居るかわからない式になる。毎度週に数回このタイプの質問が出て、同じようなタイプの答えになる。Googleででも「imogasi方式」で照会すれば、過去の沢山の例と回答(そのタイプも)が出てくる。
ーー
まず初心者や急ぐ場合はデーターフィルターフィルタオプションの設定で済ませられないか勉強すべきだ。
ーー
本来、こういう仕事の関連のエクセル表は、VBAを勉強してそれを使うべきと思う(既に回答も出ているようだ)
関数で抜き出し問題や表の組み換えは、VBAで無いと、天下りの長い式をコピペで使うだけになる。
ーー
私が紹介している「imogasi方式」では、Sheet2に時刻の所定の行に出す問題なので複雑になりすぎる。
ーー
VBAでやってみる。
例データ
しめい対応配達日時間個数
たけだ配達6月20日13:002個
みうら配達6月18日14:004個
らもす郵送6月20日ーー5個
いはら配達6月20日14:308個
かつや配達6月20日15:006個
みうら郵送6月20日ーー4個
(注意)
「ーー」セルは空白とする
「月日」列は、エクセルの年月日を入れておくこと(日付シリアル値(わかりますか)) 文字列では不可
6/20(月) の様な表示は、表示形式の設定でやること(エクセルの常識)  m/d(aaa)
時間の列も時刻シリアル値で入れてあるとする。文字列では不可
ーー
コード
標準モジュールに
Sub test01()
Dim sh1, sh2
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
d = sh1.Range("A65536").End(xlUp).Row
On Error Resume Next
For i = 2 To d
'--条件をかけて選別
If sh1.Cells(i, "B") = "配達" And sh1.Cells(i, "C") = sh2.Range("B1") And _
sh1.Cells(i, "D") <> "" Then
t = sh1.Cells(i, "D")
'---Sheet2で時刻行を探す
For r = 2 To 30
If sh1.Cells(i, "D") = sh2.Cells(r, "A") Then Exit For
Next r
'--該当行の値をSheet2の時刻該当行セット
Sheet2.Cells(r, "B") = sh1.Cells(i, "A")
Sheet2.Cells(r, "C") = sh1.Cells(i, "E")
End If
Next i
End Sub
ーー
実行結果
Sheet2
配達6月20日
12:00
12:30
13:00たけだ2個
13:30
14:00
14:30いはら8個
15:00かつや6個
15:30
16:00
・・・・・・

こういうのは「複数条件による抜き出し問題」だ。
関数で出来ればおなじみのやり方で良いのだが、既に出ているように式が長く複雑で、初心者には何をやって居るかわからない式になる。毎度週に数回このタイプの質問が出て、同じようなタイプの答えになる。Googleででも「imogasi方式」で照会すれば、過去の沢山の例と回答(そのタイプも)が出てくる。
ーー
まず初心者や急ぐ場合はデーターフィルターフィルタオプションの設定で済ませられないか勉強すべきだ。
ーー
本来、こういう仕事の関連のエクセル表...続きを読む

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QEXCEL VBA 別シートの文字をシート内で検索

excel2003 VBAで SHEET2に格納されているセルの文字をSHEET1のB列1~9000程度までの文字列の中で一致または部分一致するものがあればそのセル(B列のセル)をSHEET3に順次A列に出力したいのですが、うまくできません。SHEET2に格納されている場所はA列で(SHEET1、SHEET2の文字とも増える可能性あり)

宜しくお願いします。

Aベストアンサー

sub macro1r1()
 dim h as range
 dim c as range
 dim c0 as string

 worksheets("Sheet3").cells.clearcontents
 for each h in worksheets("Sheet2").range("A1:A" & worksheets("Sheet2").range("A65536").end(xlup).row)
  if h <> "" then
   set c = worksheets("Sheet1").range("B:B").find(what:=h.value, lookin:=xlvalues, lookat:=xlpart)
   if not c is nothing then
    c0 = c.address
    do
     worksheets("Sheet3").range("A65536").end(xlup).offset(1).value = c.value
     set c = worksheets("Sheet1").range("B:B").findnext(c)
    loop until c.address = c0
   end if
  end if
 next

 worksheets("Sheet3").select
 range("A1:B1") = array("res", "work")
 range("B2:B" & range("A65536").end(xlup).row).formula = "=MATCH(A2,Sheet1!B:B,0)"
 range("A:B").sort key1:=range("B1"), order1:=xlascending, header:=xlyes
 range("B:B").clearcontents
end sub


sub macro2r1()
 dim Target as range
 dim Crit as range
 dim r as long

 worksheets("Sheet3").cells.clearcontents
 with worksheets("sheet1")
 .range("1:1").insert shift:=xlshiftdown
 .range("B1") = "myList"
 set target = .range(.range("B1"), .range("B65536").end(xlup))
 end with

 with worksheets("sheet2")
 .range("1:1").insert shift:=xlshiftdown
 .range("B:B").insert shift:=xlshifttoright
 .range("A1:B1") = "myList"
 r = .range("A65536").end(xlup).row
 with .range("B2:B" & r)
  .formula = "=""*""&A2&""*"""
  .value = .value
 end with
 set crit = .range("B1:B" & r)
 end with

 target.advancedfilter _
  action:=xlfiltercopy, _
  criteriarange:=crit, _
  copytorange:=worksheets("Sheet3").range("A1"), _
  unique:=false

 worksheets("Sheet2").range("B:B").delete shift:=xlshifttoleft
 worksheets("Sheet2").range("1:1").delete shift:=xlshiftup
 worksheets("Sheet1").range("1:1").delete shift:=xlshiftup
end sub

sub macro1r1()
 dim h as range
 dim c as range
 dim c0 as string

 worksheets("Sheet3").cells.clearcontents
 for each h in worksheets("Sheet2").range("A1:A" & worksheets("Sheet2").range("A65536").end(xlup).row)
  if h <> "" then
   set c = worksheets("Sheet1").range("B:B").find(what:=h.value, lookin:=xlvalues, lookat:=xlpart)
   if not c is nothing then
    c0 = c.address
    do
     worksheets("Sheet3").range("A65536").end(xlup).offset(1).value =...続きを読む

QエクセルVBA 複数の条件を含む対象を抜き出す。

エクセルVBAについて質問です。
エクセルのバージョンは2003と2007を主に使用しています。

下記の様なデータがあるときに、部活が「野球」でかつクラブは「囲碁」に入っている生徒の学籍番号を別のシート(Sheet2)のB3から下に順にリスト化するマクロがどうしても出来なくて困っています。
find next等を使うのでは無いかと色々してみましたが上手く出来ない現状です。

<sheet1>
   A      B      C       D    E

1 学籍番号 学年    名前     部活   クラブ
2 2222222   1   山田 太郎  野球   囲碁
3 9854923   2   吉田 次郎   剣道   絵画  
4 1111111   3   佐藤 三郎  野球   囲碁
5 8888883   1   米山 権蔵  卓球   囲碁

Aベストアンサー

こんばんは!
Sheet1のA列(学籍番号)のみをSheet2のB3セル以降に表示すれば良いわけですね?
一例です。

画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。

Sub test()
Dim i, k As Long
Dim ws As Worksheet
Set ws = Worksheets(2)
k = 2
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 4) = "野球" And Cells(i, 5) = "囲碁" Then
k = k + 1
ws.Cells(k, 2) = Cells(i, 1)
End If
Next i
End Sub

こんな感じではどうでしょうか?m(_ _)m

QEXCEL VBA  特定シート以外のシート削除

同一のブック内に存在する複数シートのうち任意のシートのみを削除することはVBAで可能でしょうか?
(例)
 消したくないシート:TEMP1、TEMP2の2シート
 消したいシート:1、2、3....といった連番シート (VBAで作成したシート)
環境は、WIN XP PRO でEXCEL2003を使用しています。
宜しくお願い致します。

Aベストアンサー

Sub Sample()

Dim Sh As Worksheet

For Each Sh In Sheets
If Not (Sh.Name = "TEMP1" Or Sh.Name = "TEMP2") Then
Application.DisplayAlerts = False
Sh.Delete
Application.DisplayAlerts = True
End If
Next

End Sub

質問とは逆の判定のしかたですが、これではどうでしょうか?

Qエクセルマクロでアクティブセルの値を取得するのに。。これってどこが間違っているのでしょう

シートは複数ありますアクティブになったシートのアクティブセルの値を取得してそれをシート名として使用したいのですが

Sub 単独シート追加()

Dim S_Name As String

Worksheets.Add after:=Worksheets(Worksheets.Count)

S_Name = ActiveCell.Value

ActiveSheet.neme = S_Name

End Sub


ローカルウィンドーで確認すると
S_Name は””のままで
「実行時エラー」の
オブジェクトはこのプロパティまたはメソッドをサポートしていません

と、なり正常に動作しません


どこが間違いなのでしょうか

Aベストアンサー

(1)
「S_Name = ActiveCell.Value」を実行する時点では、すでに
新しく追加したシートがアクティヴになってしまっているので、
S_Nameは常に""(空文字列)になるものと思われます。
たとえば、「S_Name = ActiveCell.Value」を
「Dim S_Name As String」の次にもってきてはいかがでしょう?

(2)
「ActiveSheet.neme」ではなくて、「ActiveSheet.Name」ですね。
単純なスペルミスと思います。

Q[初心者です]VBAで指定列からAを検索し、発見したら隣のセルに値0を入れるマクロ。

VBAで指定列からAを検索し、発見したら隣のセルに0を入れるマクロを組みたいのですが、組み方がVBA初心者の為わかりません。
(例)
L列に、A、B、C、D、E、Fとランダムに文字が入っていて、
文字Aを検索し、発見したら隣のI列に値0を入れるというマクロです。

Sub Search()
Dim A As String
Set A = Worksheets("Sheet1").Cells.Find("A")
If A Is Nothing Then
ActiveCell.Offset(0, 1).Value = 0

End If
End Sub
と過去の質問で考えてみたのですが、Aがあった時、、、、
とコードが書けないです。
大変困っているので、ご教授頂けないでしょうか?
出来れば、そのままマクロに出来るコードを教えて頂けないでしょうか?
宜しくお願い致します。

Aベストアンサー

こんばんは。

#3さんのおっしゃっていることも、もっともなのですが、気になる点がありましたので、自分のことを踏まえて、書かせていただきます。

いずれ、また、同じようなケースが出会うと思います。こんな原則を考えてみたらどうでしょうか?それは、私も自身も同じなのですが、ワークシートのコマンドで行われるものは、記録マクロから作ってみるということです。他にも、「統合」とか、「置換」とか「オートフィルタ」「フィルタオプション」とかは、みんなパターンが決まっています。
その中の代表格が、この「Find」 です。

>Set A = Worksheets("Sheet1").Cells.Find("A")

>過去の質問で考えてみたのです

どうも、Find メソッドは、あるレベル以下の人は、省略する傾向があるようです。何が大事で、何が大事でないかというのは、やってみなければ分かりませんが、検索語だけを入れる書き方は、実務では、あまりしないほうがよいと思います。

だいたい、以下のTestFind2 ぐらいまでに、省略は、とどめたほうがよいです。

それは、Find は、必ずしも自分が思っているデフォルトとは違うことがあるので、「明示的(意図的に)」にオプションは入れたほうがよいです。
例えば、大文字小文字の違いを付けるなら、MatchCase:=True, 数式まで探すなら、LookIn:=xlFormulas

なお、Find メソッドは、5年経っても、たぶん完全に覚えられません。面倒なコードのひとつです。ですが、これはパターンが決まっているので、ひとつパターンが決まったら、それに当てはめればよいだけです。

#3さんで示されているMougのサンプルコードと似てはいるのですが、Mougのサンプルコードでは、Verionによって、失敗することがあります。

'--------------------------------------
'記録マクロをそのまま使う方法
Sub TestFind1()
Dim c As Range
 Set c = Columns("L:L").Find(What:="A", _
           After:=ActiveCell, _
           LookIn:=xlValues, _
           LookAt:=xlPart, _
           SearchOrder:=xlByRows, _
           SearchDirection:=xlNext, _
           MatchCase:=False, _
           MatchByte:=False, _
           SearchFormat:=False)
 c.Offset(0, 1).Value = 0
End Sub
'--------------------------------------
'TestFind1 をアレンジしてみる
Sub TestFind2()
Dim c As Range
'検索語
Const MYTXT As String = "A"
 Set c = ActiveSheet.Columns("L:L").Find(What:=MYTXT, _
           LookIn:=xlValues, _
           LookAt:=xlPart, _
           MatchCase:=False)
 If Not c Is Nothing Then
    c.Offset(0, 1).Value = 0
 End If
End Sub

'---------------------------------------
'複数ある場合(パターンを使った方法)
'---------------------------------------
Sub TestFind3()
  Dim c As Range
  Dim FirstAdd As String
  Const MYTXT As String = "A"
  Set c = ActiveSheet.Columns("L:L").Find( _
    What:=MYTXT, _
    LookIn:=xlValues, _
    LookAt:=xlPart, _
    MatchCase:=False)
  
  If Not c Is Nothing Then
    FirstAdd = c.Address
    Do
      c.Offset(, 1).Value = 0
      Set c = ActiveSheet.Columns("L:L").FindNext(c)
      If c.Address = FirstAdd Then Exit Sub
    Loop Until c Is Nothing
  End If
End Sub

こんばんは。

#3さんのおっしゃっていることも、もっともなのですが、気になる点がありましたので、自分のことを踏まえて、書かせていただきます。

いずれ、また、同じようなケースが出会うと思います。こんな原則を考えてみたらどうでしょうか?それは、私も自身も同じなのですが、ワークシートのコマンドで行われるものは、記録マクロから作ってみるということです。他にも、「統合」とか、「置換」とか「オートフィルタ」「フィルタオプション」とかは、みんなパターンが決まっています。
その中の代表...続きを読む

QVBAで他のシートの特定の列を検索・コピーし、貼り付ける。

お世話になります。
VBA初心者です、よろしくお願いいたします。
掲題にありますとおり、他のシートの特定の列を検索(抽出?)しアクティブになっているシートの特定の列に貼り付ける作業を自動で行わせたいと思っております。複数ある行の中から必要な行だけを抽出して、貼り付けるのでフォーマットを整えると思っていただければ結構です。具体的には、
[Sheet1]のデータ↓( | ←は罫線と思ってください。列の順番は毎回A→Zの順番とは限りませんが、記載内容は同じです。)
A | B | C | D | E … | Z
1 | 2 | 3 | 4 | 5 … |26
a | b | c | d | e … | z
1a| 2b| 3c| 4d| 5e… |26z
これらのデータから、特定の必要な列を選んで[Sheet2]に貼り付けを自動で行わせたいのです↓。
[Sheet2]B,G,A,W,O,Iのデータのみ必要な場合
B | G | A | W | O | I
2 | 7 | 1 | 23| 15| 9
b | g | a | w | o | i
2b| 7g| 1a|23w|15o| 9i

行数は最大で500行を超えます。HLOOKUPを各セルに書き込んで置けばよいのですが、ドッラグでは式が正しく書き込めなくて。。。
"=HLOOKUP(A1,Sheet1!A:Z,2,0)"←"A1"はA2,A3,A4となるのですが"2"がずっと2のままなので。

[Sheet1]の特定の行のコピー&ペーストなのですが、[Sheet2]の貼り付け先が1行目からではないので、何かしらの工夫が必要だと思うのですが。。。
たとえば
Columns("B:B").Select
Selection.Copy
Sheets("Sheet2").Select
Cells(2, 1).Paste
こう言う事って出来ませんよね?

私の意は伝わりましたでしょうか?なにとぞよろしくお願いいたします。

お世話になります。
VBA初心者です、よろしくお願いいたします。
掲題にありますとおり、他のシートの特定の列を検索(抽出?)しアクティブになっているシートの特定の列に貼り付ける作業を自動で行わせたいと思っております。複数ある行の中から必要な行だけを抽出して、貼り付けるのでフォーマットを整えると思っていただければ結構です。具体的には、
[Sheet1]のデータ↓( | ←は罫線と思ってください。列の順番は毎回A→Zの順番とは限りませんが、記載内容は同じです。)
A | B | C | D | E … | Z
1 | 2 | 3 ...続きを読む

Aベストアンサー

こんなのではどうでしょうか?

Sub sample()
'初期設定(コピー元とコピー先のシート、コピーする列を設定)
Dim srcSheet As Worksheet
Dim dstSheet As Worksheet
Dim copyColumns As String
Set srcSheet = Sheets("Sheet1")
Set dstSheet = Sheets("Sheet2")
copyColumns = "B,G,A,W,O,I"
'
Dim srcRowTop As Long
Dim srcRowBottom As Long
Dim dstRowTop As Long
Dim dstColumnLeft As Integer
Dim cols() As String
Dim i As Integer
'コピー元の最初と最後の行を取得(有効なデータ行は、A列には必ずデータがあるとします)
srcRowTop = 1
srcRowBottom = srcSheet.Cells(srcSheet.Rows.Count, 1).End(xlUp).Row 'A列の最後のデータの行
If (srcRowBottom = 1) And (srcSheet.Cells(1, 1) = "") Then '最後の行が1行目で、実は1行目にデータが無い場合
Exit Sub 'コピー元データなし
End If
'コピー先の最初の行を設定
dstRowTop = 10 'C10の10
dstColumnLeft = 3 'C10のC(=3)
'コピーする列名を配列へ取得
cols = Split(copyColumns, ",")
'コピー開始
For i = 0 To UBound(cols)
srcSheet.Range(cols(i) & srcRowTop & ":" & cols(i) & srcRowBottom).Copy Destination:=dstSheet.Cells(dstRowTop, i + dstColumnLeft)
Next
End Sub

ちなみに、コピー先が変わったら
'コピー先の最初の行を設定
dstRowTop = 10 'C10の10
dstColumnLeft = 3 'C10のC(=3)
の部分を変更してください。

こんなのではどうでしょうか?

Sub sample()
'初期設定(コピー元とコピー先のシート、コピーする列を設定)
Dim srcSheet As Worksheet
Dim dstSheet As Worksheet
Dim copyColumns As String
Set srcSheet = Sheets("Sheet1")
Set dstSheet = Sheets("Sheet2")
copyColumns = "B,G,A,W,O,I"
'
Dim srcRowTop As Long
Dim srcRowBottom As Long
Dim dstRowTop As Long
Dim dstColumnLeft As Integer
Dim cols() As String
Dim i As Integer
'コピー元の最初と最後の行を取得(有効なデータ行は...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング