![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?08b1c8b)
いつもお世話になります。
Private Sub CommandButton3_Click()
Dim 行 As String
Dim 列 As String
Dim 最終行 As String
Dim 検索行 As String
Dim メッセージ As Integer
Dim 一致 As Range
Dim myNO As Variant
Dim i As Long
Sheets(3).Select
最終行 = Range("A2").End(xlDown).Offset(1).Select
行 = ActiveCell.Row
列 = ActiveCell.Column
myNO = TextBox2.Value
検索行 = Range("A2").End(xlDown).Select
※・・・Set 一致 = Range("A2:検索検").Findwhat:=TextBox2,lookat:=xlWhole)
If 一致 Is Nothing Then
MsgBox "データがありません。新規コード入力します。"
Cells(行, 列 + 0) = UserForm1.TextBox2.Value
Cells(行, 列 + 1) = UserForm1.ComboBox7.Value
Else
i = Cells(行 - 1, "A")
Cells(i, 列 + 0) = UserForm1.TextBox2.Value
Cells(i, 列 + 1) = UserForm1.ComboBox7.Value
End If
End Sub
「エラー1004'Range'メソッドは失敗しました'Global'オブジェクト」とでます。※印が黄色になっています。
ユーザーフォーム1のテキストボックスの値をシート3のA列から検索して、一致すれば、A列の一致セルに上書き入力して、一致が無い場合はA列の空白セルに追加入力したいのです。よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
えっと、いろいろ改善の余地があるマクロなので、気がついたところを指摘していきます。
Dim メッセージ As Integer
この変数は使われてないので宣言は不要かと思います。(もし質問文のVBAが抜粋で、後で使うのなら別ですが)
最終行 = Range("A2").End(xlDown).Offset(1).Select
この「最終行」に範囲をSelectした結果を代入しているのは、意味がありません。最終行には True が代入されます。最終行のセル番地を代入したいのであれば、
最終行 = Range("A2").End(xlDown).Offset(1).Addresss
とする必要がありますが、その次の2行で行と列を取得しており、そして変数「最終行」はプロシージャの最後まで使われていません。
myNO = TextBox2.Value
この変数も最後まで使われていません。Findの引数として使おうとしたのかと思いますが、Findではもう一度TextBox2と書いてしまっています。
検索行 = Range("A2").End(xlDown).Select
これも先の最終行と同じく、Selectした結果を代入しているため、Trueが代入されてしまいます。今までの指摘は、マクロの動作に影響を与えるものではありませんでしたが、ここは違います。この後で検索範囲の一番下のセルとして使おうとしても、これではその番地が代入されないのです。
その次の、
Set 一致 = Range("A2:検索検").Findwhat:=TextBox2,lookat:=xlWhole)
は書式が崩れてますがですが、多分書きたいことは
Set 一致 = Range("A2:検索行").Find(what:=TextBox2,lookat:=xlWhole)
ですよね。しかし"A2:検索行"という範囲指定はできません。「検索行」は変数なので文字列に含めてしまってはいけません。「検索行」にセル番地が入っているのであれば、Range("A2:" & 検索行) あるいは Range("A2",検索行") のようにしないと正しく領域を指定できません。
以上を踏まえて、Range型の変数を使うようにして書き直してみました。
Private Sub CommandButton3_Click()
Dim 最終行 As Range 'Stringから変更
Dim 検索行 As Range 'Stringから変更
Dim 一致 As Range
Sheets(3).Select
Set 検索行 = Range("A2").End(xlDown)
Set 最終行 = 検索行.Offset(1)
Set 一致 = Range("A2", 検索行).Find(what:=TextBox2, lookat:=xlWhole)
If 一致 Is Nothing Then
MsgBox "データがありません。新規コード入力します。"
最終行.Value = UserForm1.TextBox2.Value
最終行.Offset(0, 1).Value = UserForm1.ComboBox7.Value
Else
一致.Value = UserForm1.TextBox2.Value '同じ値なので本来は不要
一致.Offset(0, 1).Value = UserForm1.ComboBox7.Value
End If
End Sub
ありがとうございました。
エラー無しに動きました。
ご指摘のとおりです。
宣言するところが理解できていません。
Set 一致 = Range("A2:検索").Findwhat:=TextBox2,lookat:=xlWhole)
のところも選択できなくて、自分なりに改良に改良をかさねて、
訳がわからなくなっていました。
VBAは本を買ってはじめてのもののわからないところばかりで・・・。
今後ともよろしくお願いいたします。
No.1
- 回答日時:
オブジェクト(コンボとか)をたくさん使ってるようなので、少しにして検証しました。
で、以下のようにすると一応動きます。============================================================
Private Sub CommandButton1_Click()
'変更前 Dim 行 As String
Dim 行 As Integer
'変更前 Dim 列 As String
Dim 列 As Integer
Dim 最終行 As String
Dim 検索行 As String
Dim メッセージ As Integer
Dim 一致 As Range
Dim myNO As Variant
'変更前 Dim i As Long
Dim i As Variant
Sheets(1).Select
最終行 = Range("A2").End(xlDown).Offset(1).Select
行 = ActiveCell.Row
列 = ActiveCell.Column
myNO = TextBox1.Value
’A2から、データのあるところまでを選択するように変更しました
検索行 = Range(Cells(2, 1), Cells(行 - 1, 列)).Select
’選択しているセルを検索するように変更しました
Set 一致 = Selection.Find(what:=TextBox1.Text, lookat:=xlWhole)
If 一致 Is Nothing Then
MsgBox "データがありません。新規コード入力します。"
Else
i = Cells(行 - 1, 1).Value
End If
End Sub
============================================================
せっかくお答え頂きましたが、うまく入力はされませんでした。
入力済みのA2~最終行が選択された状態でした。
書いて頂いた、構文を参考にさせて頂きます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Excel(エクセル) マクロで列を加えたら上手くいかなくなりました。 2 2022/05/23 17:59
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて見た映画を教えてください!
初めて見た映画を覚えていますか?
-
おすすめの美術館・博物館、教えてください!
美術館・博物館が大好きです。みなさんのおすすめをぜひお聞きしたいです。
-
あなたの「プチ贅沢」はなんですか?
お仕事や勉強などを頑張った自分へのご褒美としてやっている「プチ贅沢」があったら教えてください。
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
集中するためにやっていること
家で仕事をしているのですが、布団をはじめ誘惑だらけでなかなか集中できません。
-
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
-
4
入力済み、選択したセルに連動した行のデータをユーザーフォームで呼び出すには
Excel(エクセル)
-
5
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
6
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
7
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
8
VLOOKUP関数とテキストボックスの連携
Excel(エクセル)
-
9
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
10
ユーザーフォームで別シートを検索できますか
Excel(エクセル)
-
11
ユーザーフォームのテキストボックスに前回入力した値を表示する Excel
Visual Basic(VBA)
-
12
ユーザーフォームに別シートからデータを反映させたい。
Visual Basic(VBA)
-
13
エクセルVBAで、テキストボックスにセルの値を入れる
Excel(エクセル)
-
14
VBA フォームに入力された数値を検索条件としたい
Visual Basic(VBA)
-
15
コマンドボタンのEnterイベント後に、フォーカスを移動したい。
その他(Microsoft Office)
-
16
UserForm1.Showでエラーになります。
工学
-
17
エクセルVBA テキストボックス検索
Excel(エクセル)
-
18
VBAのユーザーフォームで、テキストボックスを連携させたいのですが。
Visual Basic(VBA)
-
19
VBA フォームのテキストボックスにセルの値を表示させたいが改行していたら改行もあわせて表示させたい
Excel(エクセル)
-
20
Excel VBA ユーザーフォーム1のコンボボックスに別ブックの値を反映させたいです。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba 2つの条件が一致したら...
-
セルに値が入っていた時の処理
-
エクセルVBAで『A列』に新...
-
Cellsのかっこの中はどっちが行...
-
rowsとcolsの意味
-
VBA 何かしら文字が入っていたら
-
エクセルVBA intersect colu...
-
マクロについて。S列の途中から...
-
行はそのままで列のみをVBAコー...
-
IIF関数の使い方
-
VBA 値と一致した行の一部の列...
-
vba 数値がゼロになるまで引く
-
Excelで、あるセルの値に応じて...
-
VBAを使って検索したセルをコピ...
-
C# 列の挿入
-
ExcelVBAでテキストルーレット...
-
VBAリストボックスへの複数列の...
-
VBAコンボボックスで選択した値...
-
空白セルをとばして転記
-
vba 重複データ合算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Cellsのかっこの中はどっちが行...
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
VBAのFind関数で結合セルを検索...
-
【VBA】2つのシートの値を比較...
-
文字列の結合を空白行まで実行
-
Changeイベントでの複数セルの...
-
URLのリンク切れをマクロを使っ...
-
VBAで指定範囲内の空白セルを左...
-
【Excel VBA】 B列に特定の文字...
-
VBAを使って検索したセルをコピ...
-
VBAで、特定の文字より後を削除...
-
エクセル 2つの表の並べ替え
-
データグリッドビューの一番最...
-
rowsとcolsの意味
-
VBAでのリスト不一致抽出について
おすすめ情報