北の窓から(芦田っち)

PC関連と私的雑感のブログ。
2015年7月10日、カッコ内に名前を加えました。昔の友だちに気付いてほしくて・・・

おやぢチップス (100):別シートにデータをコピー(Excel - VBA)

2018-03-07 14:51:04 | おやぢチップス
またもや支援ネタ・・・

  毎日こんなことばかりやっています。
  ブログの更新が間遠くなったので、記事にします (^-^;

MSDN Forum に質問がありました・・・

  Excel で別シートにデータをコピーしたい。
  ただし、既に存在するデータはコピーせず、見つからない場合にだけコピーしたい。
  どんなコードを書けばいいの?・・・というものです。

なので、サンプルコードを書いてみました。

  なお、2つのシートは同じ Excel ブック中にあるものとします。
  コピー元のシートを Source、コピー先のシートを Target としています。

  マッチングするためのキーは「都市」です。
  コピー先にない都市ならコピーします。

画像はこんな感じ・・・
  

VBA コードは次のとおりです。

  英文の質問だったので、コードのコメントも英文(もどき)にしています。
  時間がとれたら、まともな日本語のコメントにしたいと思います・・・
  (シート上のヘッダーだけはこの記事用に直しました)

==== ▼▼ ここから ==============================

' === [Transfer Data] button(on sheet1: one Loop, using Find ==========
Private Sub btn_TransferData_Click()
Application.ScreenUpdating = False
' --- get lastRow both sheet1(source) & sheet2(target)
Dim lastRowSource As Integer
Dim lastRowTarget As Integer
lastRowSource = Sheets("Source").Cells(Rows.Count, 2).End(xlUp).Row ' --[City] is in column B:2
lastRowTarget = Sheets("Target").Cells(Rows.Count, 1).End(xlUp).Row ' --[City] is in column A:1
'MsgBox " lastRowSource=" & lastRowSource & Chr(13) & " lastRowTarget=" & lastRowTarget
' --- nested loop [For-Next]
Dim rowSource As Integer
Dim targetRow As Integer
targetRow = lastRowTarget
' --- set targetRange in sheet2 ([City] is column A)
Dim targetRange As Range
Set targetRange = Sheets("Target").Range("A2:A9999")
Dim FoundCell As Range
' --- [For-Next] loop: sheet1(source)
For rowSource = 2 To lastRowSource
' --- Find [City] in targetRange: keyword is [City]
Set FoundCell _
= targetRange.Find _
(What:=Sheets("Source").Cells(rowSource, 2).Value, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
MatchCase:=xlYes)
' --- [City] is not found in sheet2
If (FoundCell Is Nothing) Then
' --- copy data from souce to target
targetRow = targetRow + 1
Sheets("Target").Cells(targetRow, 1).Value _
= Sheets("Source").Cells(rowSource, 2).Value
Sheets("Target").Cells(targetRow, 2).Value _
= Sheets("Source").Cells(rowSource, 3).Value
Sheets("Target").Cells(targetRow, 3).Value _
= Sheets("Source").Cells(rowSource, 1).Value
End If
Next
' ---
Sheets("Target").Select
Sheets("Target").Cells(lastRowTarget + 1, 1).Select
' ---
Application.ScreenUpdating = True
Application.CutCopyMode = False
End Sub

==== ▲▲ ここまで ==============================

---------------------------------------------------------
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・

  # ご質問にはできる限りお答えしています。
    ただし、お名前(本名)を書いていただいた場合に限らせていただきます。


ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・
コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« おやぢチップス (99):パニッ... | トップ | マリナーズのイチロー・・・... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

おやぢチップス」カテゴリの最新記事