以前、VLOOKUPの質問をさせていただいたのですが理解することができず
VBAでなら複雑な条件の検索と転記ができるのではないかと思い、教えてください
やりたいことは、
生産計画シートが二つあるのですが、そこから日付をもとに検索し
生産する品種のデータを転記したいのです。
vLOOKUPでやると日付のセルが結合されているため、転記が1行分しかできず不可能でした。
転記したいセルが5個 縦にならんでいるので日付がHITしたらこの範囲をココに転記できる
というVBAはできないでしょうか?
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
恐らく1ページに印刷するためにこのようなフォーマットの
表にしたのでしょうが、このフォーマットはあくまでも
印刷用でEXCELのデータはあくまでも2次元の表で
作って、印刷用にこの形式に表の任意の部分が表示できる
事を実現するほうが例えVBAを使う使わないに関わらず
合理的です。
例えば別シートのA列に日付をB列以降にこのケースだと
コード、生産品種が10列続くかな。
そこにデータを並べていくんです。
そうすれば30年分貯めても1万行強しか使いません。
そしてこの表の上でVLOOKUPが使えます。
VLOOKUPよりも
5月6日の所だけ入力すれば別シートのA列の何行目に
見つかるかをどっかに覚えてあとはINDEXでそれぞれの
セル位置に引き当てる数式を考えまるほうがいいかな?
あとの拡張、応用を考える時に2次元データで扱う習慣を
着ける事は、必ずEXCEL使い手への早道です。
No.3
- 回答日時:
すでに、回答がついているようですが、ご質問に興味を持ちました。
最初に、こういうレイアウトで日付などをまとめてしまうことを、正規化というのですが、Excelでは、真っ正直に一緒にしてしまうので、取り扱いが簡単ではなくなってしまいます。無骨でも、本来は、表は表のままにしたほうがデータとしての取り扱いは、容易にさせるものだと思います。
ただ、よくみるとレイアウトは、カード型のデータベースそのものだと思います。Excelでカード型のデータベース・アプリもあったと思います。何かキリの良い時に、探してみるのもよいかもしれません。本格的なカード型のデータベースでもよいかと思います。Excelとは違って1週間程度で使いこなせられるようになります。
-------------
以下のマクロの検索は、日付検索でも、Formulas(数式内部) で検索しますので、年数が隠れています。検索される側も、文字ですとヒットはしません。シリアル値になっていなければなりません。したがって、入力をすれば、年は今年のものになります。年数がもし違うようでしたら、2016/2/21 としても検索します。
出力自体は、ベタな状態になっていますから、生産品種を、A列にコピーするだけのものです。(値コピーにしてあります)
'//標準モジュール
Sub FindMergedCell()
Dim s_date As Variant
Dim c As Range
Dim Rng As Range
Dim j As Long
Dim dataSh1 As Worksheet
Dim dataSh2 As Worksheet
Dim TrSh As Worksheet
Dim ws
'ユーザー設定
'*************************
'検索用のシート
On Error Resume Next
With Workbooks("BookA.xlsm")
Set dataSh1 = .Worksheets("Sheet1")
End With
With Workbooks("BookB.xlsm")
Set dataSh2 = .Worksheets("Sheet1")
End With
If Err.Number <> 0 Then
If dataSh1 Is Nothing And dataSh2 Is Nothing Then
MsgBox "2つのデータ両方ともありません。", vbExclamation
Exit Sub
End If
If MsgBox("2つのブックが開いていないようですが、続行しますか?", vbOKCancel) = vbCancel Then
Exit Sub
End If
End If
On Error Resume Next
'転送先シート(検索用)
Set TrSh = ThisWorkbook.Worksheets("Sheet1") '*************************
s_date = Application.InputBox("日付をいれてください。例 m/d ", "入力")
If IsDate(s_date) = False Then MsgBox "日付と認識出来ませんでした。", vbExclamation: Exit Sub
s_date = DateValue(s_date)
For Each ws In Array(dataSh1, dataSh2)
If Not ws Is Nothing Then
With ws
Set c = .UsedRange.Find( _
What:=s_date, _
After:=.Range("A1"), _
LookIn:=xlFormulas)
If Not c Is Nothing Then
j = c.MergeArea.Rows.Count
Set Rng = c.Offset(, 2).Resize(j)
With TrSh
'A列に貼り付ける
'そのまま貼り付ける場合書式も一緒に貼り付けられる
'Rng.Copy .Cells(Rows.Count, 1).End(xlUp).Offset(1)
'値コピー
.Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(j, 1).Value = Rng.Value
End With
End If
End With
End If
Next ws
If Rng Is Nothing Then MsgBox "見つかりませんでした。", vbExclamation
Set Rng = Nothing
Set dataSh1 = Nothing
Set dataSh2 = Nothing
Set TrSh = Nothing
End Sub
No.2
- 回答日時:
補足ありがとうございました。
まだ、レイアウトが完全に把握できませんので追加で質問させてください。
1)抽出元のブック名はなんですか。
2)抽出元のブック内のシート名はなんですか。
3)抽出元のシートのデータは6日分だけなのですか。
4)抽出元のシートの左側の日付はB列ですか。右側の日付はG列ですか。
5)抽出元のシートの1番上の日付の見出しは1行目ですか。(日付データは、2~6行の共有セル)
6)抽出先のブック内の抽出先のシート名はなんですか。
7)抽出先のブックにマクロがある前提です。抽出元のブックを開いている状態でマクロを実行する前提で良いですか。
(抽出元のブックのオープンはマクロでは行わない)
No.1
- 回答日時:
前回の質問が不明なので、あなたが書かれていることが理解できません。
2つの生産計画シートのシート名は何でしょうか。
また、それらのレイアウトはどうなっていますか。
2つのシートについてレイアウトがわかるものを提示していただけませんでしょうか。
(添付の図のような例をお願いします)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数指定セルの可視セルのみを別シートに転記するVBAについて 2 2022/05/27 21:19
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- Excel(エクセル) Excelシートのある番地の文字が一致したすべての行を別シートに転記する方法 11 2022/10/25 08:43
- Excel(エクセル) VBAで、シート間の転記するコードを教えてください。 4 2023/03/26 10:43
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- その他(データベース) Excel VBA 転記について 1 2022/04/20 16:55
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Excel(エクセル) vba 同じブック内での転記について 4 2023/01/15 14:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELのSheet番号って変更でき...
-
マクロの「SaveAs」でエラーが...
-
楽天RSSからエクセルVBAを使用...
-
VBAで変数の数/変数名を動的に...
-
マクロ実行後に別シートの残像...
-
VBA別シートの最終行の次行へ転...
-
100万件越えCSVから条件を満た...
-
VBA 最終行を選んだシートにコ...
-
Excel2013で切り取り禁止
-
VBA 空白行に転記する
-
Excel VBA オートフィルターで...
-
ExcelのVBマクロを、バックグラ...
-
VBAでEXCELから固定長...
-
1004RangeクラスのPasteSpecial...
-
ExcelのVBA ListBox.RowSource...
-
Count Ifのセルの範囲指定に変...
-
VBAで複数のエクセルシートから...
-
VBA Userformで一部別シートに...
-
月毎に現金出納帳に転記するコ...
-
B列の最終行までA列をオート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
VBA 空白行に転記する
-
EXCELのSheet番号って変更でき...
-
マクロ実行後に別シートの残像...
-
VBA別シートの最終行の次行へ転...
-
Count Ifのセルの範囲指定に変...
-
Changeイベントで複数セルへの...
-
VBAで変数の数/変数名を動的に...
-
VBA 別ブックからの転記の高速...
-
【VBA】特定の条件でセルをコピー
-
VBA 実行時エラー1004 rangeメ...
-
楽天RSSからエクセルVBAを使用...
-
Unionでの他のシートの参照につ...
-
複数シートの複数列に入力され...
-
ExcelのVBマクロを、バックグラ...
-
100万件越えCSVから条件を満た...
-
VBA Userformで一部別シートに...
-
Excel VBA オートフィルターで...
-
Excel2013で切り取り禁止
-
VBAでEXCELから固定長...
おすすめ情報
ちょっと見づらいかもしれませんが貼り付けてみました
画像のようなレイアウトの中から一致する日付の生産品種 コードを5行分抽出したいのです
検索の対象は同一ファイルのシートにあるのではなく、2つのエクセルファイル(同じレイアウト)の中から一致する日付のデータのみを抽出してくるというイメージです