質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

1176閲覧

VBA記述の仕方(2つの条件に合致したセルを別のシートへ転記)

sakura12

総合スコア3

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2021/09/29 07:46

編集2021/09/29 08:29

前提・実現したいこと

シート1
(転記元)
A B
1 日付 2021/10/2
2 家賃 80,000
3 光熱費 15,000
4 食費 58,000

という数値が入っています。
※こちらは、B1,B2,B3,B4に毎日、入力更新していきます。

シート2
(転記先)
A   B   C   D ・・・・
1 日付 2021/9/30 2021/10/1 2021/10/2 ・・・・
2 家賃 50,000 38,000 80,000  ・・・・
3 光熱費 10,000 12,000 15,000  ・・・・
4 食費  80,000 73,000 58,000  ・・・・

転記先の日付は事前に入力しておりますが、
転記元の日付と転記先の日付が合致することで、
転記先の2,3,4行を転記したいです。

別シートにある条件に合致したセルに転記したい場合、
VBAの記述の仕方が知りたいと思っております。

※こちら、毎日更新し、
更新ボタンを転記元か転記先に作り、そのボタンを押すことで
自動更新するような形にできないかと考えております。
ボタンの作成の仕方やマクロの登録の仕方はわかります。

私が初めて、コードを書いており、多分、間違いが多いかと思います。
ご教授いただけますと幸いです。

Sub 登録()

Dim ThisSh As Worksheet
Dim ThisCh As Worksheet
Dim Clo As Long
Dim Rws As Long

Sh = Wb.Sheets("Sheet2")
Ch = Wb.Sheets("Sheet1")

Set ThisSh = ThisWorkbook.Sheets("Sheet1")
Set ThisCh = ThisWorkbook.Sheets("Sheet2")

col = ThisSh.Range("1:1").Find(What:=Ch.Range("B1")).Column
Rws = ThisSh.Range("A:A").Find(What:=Ch.Range("A2")).Row
ThisSh.Cells(Rws, col).Value = Ch.Range("B2")

col = ThisSh.Range("1:1").Find(What:=Ch.Range("B1")).Column
Rws = ThisSh.Range("A:A").Find(What:=Ch.Range("A3")).Row
ThisSh.Cells(Rws, col).Value = Ch.Range("B3")

col = ThisSh.Range("1:1").Find(What:=Ch.Range("B1")).Column
Rws = ThisSh.Range("A:A").Find(What:=Ch.Range("A4")).Row
ThisSh.Cells(Rws, col).Value = Ch.Range("B4")

Set ThisSh = Nothing
Set ThisCh = Nothing
Set Sh = Nothing
Set Ch = Nothing
Set Wb = Nothing

End Sub

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hex309

2021/09/29 08:06

現時点で、プログラムはどこまでできていますか? 途中でもいいので、コードを提示されると回答が付きやすいと思います。
sakura12

2021/09/29 08:22

こんにちは。 私が初めて、コードを書いており、多分、間違いが多いかと思います。 ご教授いただけますと幸いです。 Sub 登録() Dim ThisSh As Worksheet Dim ThisCh As Worksheet Dim Clo As Long Dim Rws As Long Sh = Wb.Sheets("Sheet2") Ch = Wb.Sheets("Sheet1") Set ThisSh = ThisWorkbook.Sheets("Sheet1") Set ThisCh = ThisWorkbook.Sheets("Sheet2") col = ThisSh.Range("1:1").Find(What:=Ch.Range("B1")).Column Rws = ThisSh.Range("A:A").Find(What:=Ch.Range("A2")).Row ThisSh.Cells(Rws, col).Value = Ch.Range("B2") col = ThisSh.Range("1:1").Find(What:=Ch.Range("B1")).Column Rws = ThisSh.Range("A:A").Find(What:=Ch.Range("A3")).Row ThisSh.Cells(Rws, col).Value = Ch.Range("B3") col = ThisSh.Range("1:1").Find(What:=Ch.Range("B1")).Column Rws = ThisSh.Range("A:A").Find(What:=Ch.Range("A4")).Row ThisSh.Cells(Rws, col).Value = Ch.Range("B4") Set ThisSh = Nothing Set ThisCh = Nothing Set Sh = Nothing Set Ch = Nothing Set Wb = Nothing End Sub
hex309

2021/09/29 08:25

ご提示ありがとうございます。 できれば、お手数ですが、質問が追記とうできるはずなので、そちらに記載してください。 ここだと、気づかない方のほうが多いと思いますので。
sakura12

2021/09/29 08:28

かしこまりました。大変失礼いたしました。ありがとうございます。 追記致します。
guest

回答2

0

ベストアンサー

余分な変数があるのと、元データとコピー先がごっちゃになってますね。
以下、ご参考まで
なお、対象の列を何度も検索する必要はないので、1回にしています。
まずは、以下を理解するようにしてみてください。

VBA

1Sub 登録() 2 Dim ThisSh As Worksheet 3 Dim ThisCh As Worksheet 4 Dim Col As Long 5 Dim Rws As Long 6 7 Set ThisSh = ThisWorkbook.Sheets("Sheet1") 8 Set ThisCh = ThisWorkbook.Sheets("Sheet2") 9 10 Col = ThisCh.Range("1:1").Find(What:=ThisSh.Range("B1").Value).Column 11 12 Rws = ThisCh.Range("A:A").Find(What:=ThisCh.Range("A2").Value).Row 13 ThisCh.Cells(Rws, Col).Value = ThisSh.Range("B2").Value 14 15 Rws = ThisCh.Range("A:A").Find(What:=ThisCh.Range("A3").Value).Row 16 ThisCh.Cells(Rws, Col).Value = ThisSh.Range("B3").Value 17 18 Rws = ThisCh.Range("A:A").Find(What:=ThisCh.Range("A4").Value).Row 19 ThisCh.Cells(Rws, Col).Value = ThisSh.Range("B4").Value 20 21 Set ThisSh = Nothing 22 Set ThisCh = Nothing 23End Sub

投稿2021/09/29 08:39

編集2021/09/29 08:41
hex309

総合スコア761

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura12

2021/09/29 09:28

ありがとうございました!こちらで登録ができるようになりました! 本当に助かりました!
guest

0

科目の順番が固定されているなら、一度にまとめてセットするのも手ですかね。

VBA

1ThisCh.Range("1:1").Find(ThisSh.Range("B1").Value).Resize(4).Value = ThisSh.Range("B1:B4").Value

投稿2021/09/29 09:22

編集2021/09/29 09:24
jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura12

2021/09/29 09:28

ありがとうございます!私では考えつかないので、本当に素晴らしいと思いました! また、よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問