Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3008 / 13646 ツリー ←次へ | 前へ→

【64810】同じ項目へのデータコピー MAX 10/3/15(月) 16:01 質問[未読]
【64812】Re:同じ項目へのデータコピー 超初心者 10/3/15(月) 17:45 発言[未読]
【64818】ありがとうございました。 MAX 10/3/16(火) 12:01 お礼[未読]
【64813】Re:同じ項目へのデータコピー UO3 10/3/15(月) 19:45 回答[未読]
【64819】ありがとうございました。 MAX 10/3/16(火) 12:03 お礼[未読]

【64810】同じ項目へのデータコピー
質問  MAX  - 10/3/15(月) 16:01 -

引用なし
パスワード
   A1:型名、B1:数量、C1:金額で、Sheet1とSheet2がまったく同じ項目で、
Sheet1をSheet2へ全てコピーしている場合、Sheet1に1列増えるたびに
VBAの記述を変えています。
例えば、Sheet1に1列項目が増えて、A1:型名、B1:品名、C1:数量、D1:金額
となり、Sheet2の項目は変更無い場合、同じ項目にデータをコピーするには、
どのような記述になるのでしょうか?

【64812】Re:同じ項目へのデータコピー
発言  超初心者  - 10/3/15(月) 17:45 -

引用なし
パスワード
   ▼MAX さん:

コピー前にSheet2のクリア処理は必要?
クリアしてないので、必要なら追加して下さい。

Sub sample()
  Dim myCol1 As Long
  Dim myCol2 As Long
  Dim myRowMx As Long
  
  For myCol2 = 1 To Sheets("Sheet2").Cells(1, Cells.Columns.Count).End(xlToLeft).Column
    With Sheets("Sheet1")
      For myCol1 = 1 To .Cells(1, Cells.Columns.Count).End(xlToLeft).Column
        If .Cells(1, myCol1).Value = Sheets("Sheet2").Cells(1, myCol2).Value Then
          myRowMx = .Cells(Cells.Rows.Count, myCol1).End(xlUp).Row
          .Range(.Cells(2, myCol1), .Cells(myRowMx, myCol1)) _
              .Copy Sheets("Sheet2").Cells(2, myCol2)
          Exit For
        End If
      Next myCol1
    End With
  Next myCol2
End Sub

ゴリゴリ回してみました^^;;
あまりスマートではありませんが、参考までに。

【64813】Re:同じ項目へのデータコピー
回答  UO3  - 10/3/15(月) 19:45 -

引用なし
パスワード
   ▼MAX さん:
こんばんは。
既に回答が出ていますが、このようなコードでも。

Sub SampleX()
Dim cols1 As Long, cols2 As Long, rows1 As Long
Dim sh1 As Worksheet, sh2 As Worksheet
Dim x As Long
Dim z
Dim sh2Head As Range

  Set sh1 = Worksheets("Sheet1")
  Set sh2 = Worksheets("Sheet2")
  cols1 = sh1.UsedRange.Columns.Count
  rows1 = sh1.UsedRange.Rows.Count
  cols2 = sh2.UsedRange.Columns.Count
  Set sh2Head = sh2.UsedRange.Resize(1)
  For x = 1 To cols1
    z = Application.Match(sh1.Cells(1, x).Value, sh2Head, 0)
    If VarType(z) <> vbError Then
      sh2.UsedRange.Columns(z).Resize(rows1).Value = sh1.UsedRange.Columns(x).Value
    End If
  Next
End Sub

【64818】ありがとうございました。
お礼  MAX  - 10/3/16(火) 12:01 -

引用なし
パスワード
   ▼超初心者 さん:

勉強させていただきます。

【64819】ありがとうございました。
お礼  MAX  - 10/3/16(火) 12:03 -

引用なし
パスワード
   ▼UO3 さん:

勉強させていただきます。

3008 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free