[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『転記』(チョコ)
ユーザーフォームのテキストボックスに日付を入力し転記ボタン押しで別シートの日付(A列)と一致した日付行にデータを転記したいです。
どのようなマクロでできるようになるか教えて頂きたく。
よろしくお願いします。
テキストボックス
1/1 転記ボタン
データ
A B C
1 亀 鳥
2
↓
別シート
A B C
1 1月1日 亀 鳥
2 1月2日
< 使用 Excel:Excel2013、使用 OS:Windows10 >
よくわかりませんが、やることは
(1) 日付を入力するテキストボックスから、【日付】データを取得する (2) Match関数やFindメソッドで、別シートの日付(A列)から該当する【行】を調べる (3) (2)で調べた行の該当する【列】にテキストボックスの値を書き込む
ということですよね?
(もこな2) 2021/03/27(土) 05:37
データシートA1亀 B1鳥があります。転記ボタンがありユーザーフォーム内の
テキストボックスに日付を入力し登録ボタンでその日付と一致する別シート日付行
B1C1に転記したいと考えています。
(テキストボックスに1/1と入力登録で別シートの1月1日横に転記)
説明下手ですみません。
申し訳ないのですがはじめから教えていただけないでしょうか。
よろしくお願いします。
(チョコ) 2021/03/27(土) 07:32
(もこな2) 2021/03/27(土) 08:09
シートは作ってあるとか、ユーザーフォームや、コントロールはできてるとかその辺教えてください。
また、シートが作ってあるなら、項目行含めて5〜6行のサンプルを提示してください。
(もこな2) 2021/03/27(土) 08:42
色々試したのですがうまくいかなくて。
Private Sub CommandButton1_Click()
Dim wb As Workbook
Workbooks.Open ThisWorkbook.Path & "test.xlsm"
Set wb = ActiveWorkbook
Dim myRange As Range
Dim myObj As Range
Set myRange = wb.Worksheets(1).Range("A1:A100")
Set myObj = myRange.Find(UserForm2.TextBox1.Value, LookAt:=xlWhole)
myObj.Offset(0, 1) = ThisWorkbook.Worksheets(1).Range("A1").Value
Unload Me
End Sub
(チョコ) 2021/03/27(土) 08:56
テキストボックスの1/1を検索値で別シートの1月1日(シリアル値?)を そのままでは検索出来ないでしょね Findメソッドで日付を検索するのは以外と面倒です (参考) 日付を検索する http://officetanaka.net/excel/vba/tips/tips131b.htm (どん) 2021/03/27(土) 10:04
(チョコ) 2021/03/27(土) 11:16
Private Sub CommandButton1_Click() Dim wb As Workbook Dim 行 As Variant Dim 日付 As Date
'▼書き込み先のブックが開いてなかったときだけ開く On Error Resume Next Set wb = Workbooks("test.xlsm") On Error GoTo 0 If wb Is Nothing Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\test.xlsm") '(\ が抜けていたので修正) End If
'▼日付を"日付型"データとして取得する(Excel君に忖度してもらう) 日付 = TextBox1.Value
'▼書き込む行を探す 行 = Application.Match(CLng(日付), wb.Worksheets(1).Range("A1:A100"), 0)
'▼書き込む行が見つかった時だけ処理する If Not IsError(行) Then ThisWorkbook.Worksheets("データ").Range("A1:B1").Copy wb.Worksheets(1).Cells(行, "B") End If
End Sub
(もこな2) 2021/03/27(土) 11:20
わかりやすい回答ありがとうございます。
今、試すことが出来ないので後で試してみたいと
思います。
(チョコ) 2021/03/27(土) 12:16
(じじ) 2021/03/27(土) 14:48
下記コードで実行時エラー424
オブジェクトが必要ですとなります。
どこが悪いのでしょうか?
ThisWorkbook.Worksheets("データ").Range("A1:B1").Copy wb.Worksheets(1).Cells(行, "B") (チョコ) 2021/03/27(土) 22:51
向こうで続けるなら、こちらにその旨書き込んでください。
(もこな2) 2021/03/27(土) 23:43
その部分は(1)にしています。
これではだめでしょうか?
ThisWorkbook.Worksheets(1).Range("A1:B1").Copy wb.Worksheets(1).Cells(行, "B")
(チョコ) 2021/03/27(土) 23:52
>その部分は(1)にしています。
うっかり書き込んだの見ちゃいましたか・・・まぁ、それだとシート名は原因ではないですね。
そのエラーが出るとき、「行」と「wb」には何が格納されているか教えてください。
また、↓のように修正したらどうなるか教えてください。
ThisWorkbook.Worksheets(1).Range("A1:B1").Copy wb.Worksheets(1).Cells(行, "B")
↓
ThisWorkbook.Worksheets(1).Range("A1:B1").Copy wb.Worksheets(1).Paste Destination:=wb.Worksheets(1).Cells(行, "B")
(もこな2) 2021/03/28(日) 00:28
変数 行 の値がうまくないんだと思います。 日付 = CDate(TextBox1.Value) 行 = Application.Match(CLng(日付), wb.Worksheets(1).Range("A1:A100"), 0)
だと思いますよ。 TextBox1.Value は文字列なので、→シリアル値→整数 の2段階の変換が必要です。 (´・ω・`) 2021/03/28(日) 00:45
ThisWorkbook.Worksheets(1).Range("A1:B1").Value.Copy
↑ 値を転記したいのでValue挿入 wb.Worksheets(1).Paste Destination:=wb.Worksheets(1).Cells(行, "B") (チョコ) 2021/03/28(日) 01:07
日付 = CDate(TextBox1.Value)
上記も試してみましたが数式が転記されました。
転記元のセルには計算式が入っているのでその値を
転記したいです。
説明不足で申し訳ありません。
Value.Copyではオブジェクトエラーが出てしまいます。
(チョコ) 2021/03/28(日) 01:23
■1
>「行」と「wb」格納はわからないです。
ブレークポイントを設定してステップ実行してますか?
「ステップ実行」が分からない場合は↓参照
【ステップ実行】 https://www.239-programing.com/excel-vba/basic/basic023.html http://plus1excel.web.fc2.com/learning/l301/t405.html
ついでに↓も覚えてしまいましょう。
【イミディエイトウィンドウ】 https://www.239-programing.com/excel-vba/basic/basic024.html https://excel-ubara.com/excelvba1/EXCELVBA486.html
【ローカルウィンドウ】 https://excel-ubara.com/excelvba4/EXCEL266.html http://excelvba.pc-users.net/fol8/8_2.html
■2
UserForm2.TextBox1.Value には何がはいっているのですか?
(´・ω・`)さんの指摘については↓のようにしてるので、型が一致しないっていうエラーがでないなら、Excel君のほうでなんとかしてくれてるとおもいますが・・・
Dim 日付 As Date
■3
ThisWorkbook.Worksheets(1).Range("A1:B1").Value.Copy
↑は構文としておかしいです。
「マクロの記録」機能をつかって
(1)コピー範囲をコピーする (2)貼付したいセルで右クリック (3)形式を選択して貼り付け - 値
という操作をして、どのような命令が必要か研究してみましょう。
■4
もう一度確認。
「行」「wb」「日付」には何が格納されてますか
■5
こちらも、もう一度確認
↓のように修正したらどうなるか教えてください。
(エラーが出る場合、どの箇所でなんというエラー(エラー番号、エラーメッセージ)がでるのか)
ThisWorkbook.Worksheets(1).Range("A1:B1").Copy wb.Worksheets(1).Cells(行, "B") ↓ ThisWorkbook.Worksheets(1).Range("A1:B1").Copy wb.Worksheets(1).Paste Destination:=wb.Worksheets(1).Cells(行, "B")
(もこな2) 2021/03/28(日) 02:28
■4 「行」はテキストボックスに1/1と入力で 1 : Variant/Double
「日付」は #2021/01/01# : Date
「wb」は何が入っているかわからないです。 wb : : Workbook/ThisWorkbook
■5 テキストボックス1/1実行でエラーは出ませんでした。
転記先のB1セルに計算式がコピーされていました。
もこな2さん、上記のような結果でした。
(チョコ) 2021/03/28(日) 13:02
>転記先のB1セルに計算式がコピーされていました。
これのどこが不満なんですかね? セルのコピーって何やっているか解ってますか? 少しは自分で考えましょう。 (基本) 2021/03/28(日) 13:15
■4のレス
>「wb」は何が入っているかわからないです。
おそらく(変えてなければ)、「tes.xlsm」がセットされてますよ。
そうなると、
テキストボックスに「1/1」という"文字列"が入っていて Date型の変数に格納したときに「2021/01/01」と解釈され test.xlsmの1番目のシートのA列の1〜100行目までをMatch関数で「2021/01/01」をキーにして調べた結果 1行目でヒットしたので【行】に1が格納された
ということなので、正常に動いてますね。
>テキストボックス1/1実行でエラーは出ませんでした。
えっと、↓でエラーが出てるという話ではありませんでしたか?
>下記コードで実行時エラー424 >オブジェクトが必要ですとなります。
次投稿へ続きます。
(もこな2) 2021/03/28(日) 13:33
Private Sub CommandButton1_Click() Dim wb As Workbook Dim 行 As Variant Dim 日付 As Date
Stop
On Error Resume Next Set wb = Workbooks("test.xlsm") On Error GoTo 0 If wb Is Nothing Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\test.xlsm") End If
日付 = TextBox1.Value 行 = Application.Match(CLng(日付), wb.Worksheets(1).Range("A1:A100"), 0)
If Not IsError(行) Then ThisWorkbook.Worksheets(1).Range("A1:B1").Copy wb.Worksheets(1).Cells(行, "B").PasteSpecial Paste:=xlPasteValues End If End Sub
↓のようにすればよいと思いますよ
Private Sub CommandButton1_Click() Dim wb As Workbook Dim 行 As Variant Dim 日付 As Date
Stop
On Error Resume Next Set wb = Workbooks("test.xlsm") On Error GoTo 0 If wb Is Nothing Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\test.xlsm") End If
日付 = TextBox1.Value 行 = Application.Match(CLng(日付), wb.Worksheets(1).Range("A1:A100"), 0)
If Not IsError(行) Then With ThisWorkbook.Worksheets(1).Range("A1:B1") wb.Worksheets(1).Cells(行, "B").Resize(, .Columns.Count).Value = .Value End With End If
End Sub
(もこな2) 2021/03/28(日) 13:42
無事値のみ転記されました。
今回は長い時間付き合ってくださって本当にありがとうございました。
失礼な所もあったかと思いますがご容赦ください。
では失礼します。
(チョコ) 2021/03/28(日) 14:08
ちなみに、
・「test.xlsm」ってマクロ付きブックじゃなきゃだめなの? ・ユーザーフォームで処理せず、セルに日付を入力して、シート上にActiveXコントロール置くのじゃだめなの? ・コマンドボタン押すたびに「test.xlsm」が開いてるか判定するのってめんどくさくない?
など、ツッコミたい部分がほかにもありましたが、話は終わりのようなので、どうでもいいですかね・・・
(もこな2) 2021/03/28(日) 14:30
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.