VBAマクロ修正でエラーが発生する理由を解説します

このQ&Aのポイント
  • VBAのマクロを使用してExcelのデータを登録する際にエラーが発生します。具体的には、`Cells(wRow, 10) = Me.txt携帯番号`の部分でエラーが発生します。
  • エラーが発生する理由は、`Me.txt携帯番号`の値が空白またはNullの場合に、セルに値が割り当てられないためです。
  • 解決策としては、`Me.txt携帯番号`の値が空白またはNullの場合には、セルに値を割り当てる前にエラーチェックを行い、エラーが発生する前に終了するように修正することです。
回答を見る
  • ベストアンサー

VBA マクロ 修正

Private Sub UserForm_Initialize() Me.lbl行番号.Caption = Worksheets("顧客情報").Range("A1").CurrentRegion.Rows.Count + 1 End Sub Private Sub cmd検索_Click() frm顧客検索.Show vbModal If rtnNo > 1 Then With Worksheets("顧客情報") Me.lbl行番号.Caption = rtnNo Me.txt顧客番号 = .Cells(rtnNo, 1) Me.txt顧客名 = .Cells(rtnNo, 2) Me.txt生年月日 = .Cells(rtnNo, 3) Me.txt年齢 = .Cells(rtnNo, 4) Me.txt性別 = .Cells(rtnNo, 5) Me.txt郵便番号 = .Cells(rtnNo, 6) Me.txt住所 = .Cells(rtnNo, 7) Me.txt電話番号1 = .Cells(rtnNo, 8) Me.txt電話番号2 = .Cells(rtnNo, 9) Me.txt携帯番号 = .Cells(rtnNo, 10) End With End If End Sub Private Sub cmd登録_Click() Dim wRow As Long If Me.txt顧客番号 = "" Then MsgBox "顧客番号を入力してください。", vbExclamation + vbOKOnly, "入力エラー" Exit Sub End If If Me.txt顧客名 = "" Then MsgBox "顧客名を入力してください。", vbExclamation + vbOKOnly, "入力エラー" Exit Sub End If With Worksheets("顧客情報") wRow = .Range("A" & Rows.Count).End(xlUp).Row + 1 .Cells(wRow, 1) = Me.txt顧客番号 .Cells(wRow, 2) = Me.txt顧客名 .Cells(wRow, 3) = Me.txt生年月日 .Cells(wRow, 4) = Me.txt年齢 .Cells(wRow, 5) = Me.txt性別 .Cells(wRow, 6) = Me.txt郵便番号 .Cells(wRow, 7) = Me.txt住所 .Cells(wRow, 8) = Me.txt電話番号1 .Cells(wRow, 9) = Me.txt電話番号2 .Cells(wRow, 10) = Me.txt携帯番号 End With Unload Me End Sub エクセルのマクロを設定しました。 登録時ここでエラーがでてしまうのですがなぜでしょうか? Cells(wRow, 10) = Me.txt携帯番号 Cells(wRow, 10) = Me.txt携帯番号ここの部分を消し 登録してみると登録ができるのですが・・・ わからなくなり書き込みました 宜しくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.3

こんにちは エラーからすると、「txt携帯番号」というテキストボックスが無いという事では? オブジェクト名を良く確認してみて下さい。

その他の回答 (2)

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんばんは どのようなエラーですか? Me.txt携帯番号の「txt携帯番号」は「Me.」と入力した時点でインテリセンスで 表示されたものですか? シートは保護されていないですか? Cells(wRow, 10) のJ列のセルは入力可能ですか?

jikkenn
質問者

補足

コンパイル エラー メドット データメンバーが見つかりませんと でてきます J列は入力可能です シートも保護していないです

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.1

型指定がしてないですし、すべてが曖昧ですし、エラー内容もわからないので何とも言えませんが、携帯番号だけが数値とテキストで型が違うのでは?入力側がテキストなのか数値なのか、セル側が数値なのかテキストなのかわかりませんが。 Cstrなどでテキストに整えるとかClngなどで数値にするとかしてみるとか。

関連するQ&A

  • エクセル フォーム マクロ

    Private Sub cmd登録_Click() '← 登録ボタン押下時の処理追加 Dim wRow As Long If Me.txtNo = "" Then '顧客番号が未入力の場合はエラー表示 MsgBox "顧客番号を入力してください。", vbExclamation + vbOKOnly, "入力エラー" Exit Sub End If If Me.txt氏名 = "" Then '顧客名が未入力の場合はエラー表示 MsgBox "顧客名を入力してください。", vbExclamation + vbOKOnly, "入力エラー" Exit Sub End If With Worksheets("顧客情報") wRow = .Range("A1").CurrentRegion.Rows.Count + 1 '← 最終行+1 .Cells(wRow, 1) = Me.txtNo 'フォームに入力された各データをシートに送る .Cells(wRow, 2) = Me.txt氏名 .Cells(wRow, 3) = Me.txt生年月日 .Cells(wRow, 4) = Me.txt年齢 .Cells(wRow, 5) = Me.txt性別 .Cells(wRow, 6) = Me.txt郵便番号 .Cells(wRow, 7) = Me.txt住所 .Cells(wRow, 8) = Me.txt電話番号1 .Cells(wRow, 9) = Me.txt電話番号2 .Cells(wRow, 9) = Me.txt携帯番号 End With Unload Me '← フォームを閉じる End Sub これで作成したのですがうまく動かず 助けてほしいです A1:M3までセル結合しそこにボタンをいろいろ配置しました A4にタイトル(No、氏名、生年月日・・・・・)を書きておいときました フォームを作成呼びだし打ったら タイトルのところがすべて置き換わってしまう 再度押すとA4が再度置換される 次の行に移ってくれなくなりました なぜでしょうか? wRow = .Range("A1").CurrentRegion.Rows.Count + 1 '← 最終行+1 この部分かと思いA1→A5に変更してみてもうまくいきません どうすればいいでしょうか?

  • EXCEL リストボックスのデータから除外したい

    次の3項目のフォームがあります。 "番号" "お店" "分類" これら項目に入力した値からシートデータベースの情報をリストボックスに表示させているのですが、"分類"にあるABCDEの情報のうちDの情報を省いて表示させたいのですがわかりません。 省く指定はチェックボックスを考えています。 ご教授よろしくお願いいたします。 ↓コード Private Sub SetListBox() Dim wRow As Long Dim wLstRow As Long Dim wHitFlg As Boolean Me.lst顧客リスト.Clear wLstRow = 0 With Worksheets("顧客情報") For wRow = 2 To .Range("A1").CurrentRegion.Rows.Count wHitFlg = True If Me.txt顧客名 <> "" Then If InStr(1, .Cells(wRow, .Range("顧客名列").Column), Me.txt顧客名, vbTextCompare) = 0 Then wHitFlg = False End If End If If Me.cmb顧客分類 <> "" Then If .Cells(wRow, .Range("顧客分類列").Column) <> Me.cmb顧客分類 Then wHitFlg = False End If End If If Me.TextBox1 <> "" Then If InStr(1, .Cells(wRow, .Range("フリガナ列").Column), Me.TextBox1, vbTextCompare) = 0 Then wHitFlg = False End If End If If wHitFlg = True Then Me.lst顧客リスト.AddItem "" Me.lst顧客リスト.List(wLstRow, 0) = wRow Me.lst顧客リスト.List(wLstRow, 1) = Worksheets("顧客情報").Cells(wRow, 2) Me.lst顧客リスト.List(wLstRow, 2) = Worksheets("顧客情報").Cells(wRow, 3) Me.lst顧客リスト.List(wLstRow, 3) = Worksheets("顧客情報").Cells(wRow, 8) wLstRow = wLstRow + 1 End If Next End With

  • ユーザーフォームでの新規ボタン作成

    エラーが出て、自己解決が出来ず皆さんのお知恵を借りたく投稿しました。 質問内容や文章が分かりづらくてご迷惑かもしれませんが、どうかよろしくお願いいたします。 Excel、VBAのユーザーフォームで顧客情報を入力するものを作成しています。 やりたい事は、新規ボタンを押したら氏名が入っていないセル(行)にジャンプするものを作成したいです。 まず、私がした事として・・・・ ---------------------------------- Private i As Long Public Sub Display() laCODE.Caption = Worksheets("顧客データ").Cells(i, 1).Value cmb部屋番号.Value = Worksheets("顧客データ").Cells(i, 2).Value txt氏名.Value = Worksheets("顧客データ").Cells(i, 3).Value txt生年月日.Value = Worksheets("顧客データ").Cells(i, 4).Value txtTEL.Value = Worksheets("顧客データ").Cells(i, 5).Value end sub Private Sub UserForm_Initialize() Worksheets("顧客データ").Select i = 2 Call Display end sub 新規ボタンをコマンドボタンで作成し、 Private Sub cmd新規_Click() If Me.txt氏名 <> "" Then r = Cells(i, 3).End(xlDown).Row i = r + 1 Call Display Else MsgBox "氏名が空欄です。", vbOKOnly + vbExclamation, "Input Error!" '空欄であればエラー表示 Exit Sub End If End Sub 顧客データというシートがあり、1行目にはタイトル、2行目以降にデータ内容が登録されます。 ---------------------------------- 内容は、多少省略はしていますが、上記の内容で作成しました。 新規ボタンを押すと、氏名が登録されていないレコードまでジャンプし、一見成功したように見えますが、最後のレコード(氏名が入っている)で、新規ボタンを押すとエラーが出てしまいます。 初心者でご迷惑かもしれませんが、どうかご教授よろしくお願い致します。

  • マクロ 修正 (初心者です)

    Option Explicit Private lastRow As Long Private Index As Integer Private Sub CommandButton1_Click() Unload Me End Sub Private Sub あいまいボタン_Click() Dim last As Long If 検索名前テキストボックス.Text = "" Then MsgBox "あいまい抽出する名前を入力してください。" Exit Sub End If last = Range("A500").End(xlUp).Row Range("A2:D" & last).AutoFilter Field:=2, Criteria1:="=*" & 検索名前テキストボックス.Text & "*" End Sub Private Sub UserForm_Activate() Dim i As Long lastRow = Worksheets("顧客情報").Cells(Rows.Count, 1).End(xlUp).Row + 1 If lastRow <= 3 Then Exit Sub End If For i = 4 To lastRow 名前リストボックス.AddItem Cells(i, 2) Next End Sub Private Sub 検索ボタン_Click() Dim searchName As String searchName = 検索名前テキストボックス.Text If searchName = "" Then MsgBox "検索する名前を入力してください。" Else Dim i As Long Dim no As Long For i = 0 To 名前リストボックス.ListCount - 1 If 名前リストボックス.List(i) = searchName Then no = i 名前リストボックス.ListIndex = no Exit For ElseIf i >= 名前リストボックス.ListCount - 1 Then MsgBox "該当なし。" Exit For End If Next Index = no + 3 Rows(Index).Select End If End Sub B列に名前を入力しています B3から検索してくれるマクロを作成しました(インターネット見ながら) 別の検索も作りたくてどこをいじればいいのかわからず書き込みました G3列(住所を検索)から下側を検索したいのですがどこをいじればいいでしょうか?

  • VBAにてリストボックスに表示された文字をエクセルのセルにコピペするには

    先日、ここで教えてもらった以下の内容で、幾つかのテキストボックスに表示された内容のうち、電話番号をエクセルのセルに転記する方法が、上手くいきません。”検索"名のシート上で実行します。 過去のログを参考にしましたが、解決できませんでした。 またお世話になりますが、だれか教えてください。 Private Sub CommandButton1_Click() Dim Namae As String Dim MeNamae As UserForm Dim ken As String Namae = TextBox1.Text Set MeNamae = UserForm1 Call 検索(Namae, MeNamae) End Sub Public Sub 検索(ByVal Namae As String, ByRef MeNamae As UserForm) Dim Nagasa As Integer Dim i As Long Dim MaxRows As Long Dim kensaku As Worksheet Dim KensakuChar As String Dim ListNamae As String Dim ListChar As String Dim KBanme As Integer Dim LBanme As Integer Set kensaku = Worksheets("顧客データ") MaxRows = kensaku.UsedRange.Rows.Count Nagasa = Len(Namae) MeNamae.ListBox1.Clear For i = 3 To MaxRows ListNamae = kensaku.Cells(i, 3) KBanme = 0 LBanme = 0 Do Do While Nagasa >= KBanme KBanme = KBanme + 1 KensakuChar = Mid(Namae, KBanme, 1) If KensakuChar <> " " Then Exit Do End If Loop Do While Nagasa >= LBanme LBanme = LBanme + 1 ListChar = Mid(ListNamae, LBanme, 1) If ListChar <> " " Then Exit Do End If Loop If KensakuChar = ListChar Then If Nagasa = KBanme Then With MeNamae .ListBox1.AddItem (ListNamae) .ListBox1.List(.ListBox1.ListCount - 1, 1) = i End With End If Else Exit Do End If Loop Until Nagasa <= KBanme Next End Sub Private Sub ListBox1_Click() Dim r As Long With ListBox1 If .ListIndex > -1 Then r = .List(.ListIndex, 1) '選択した名前の行 TextBox6.Value = Worksheets("顧客データ").Cells(r, 3) 'カタカナ名 TextBox2.Value = Worksheets("顧客データ").Cells(r, 5) '漢字名 TextBox3.Value = Worksheets("顧客データ").Cells(r, 7) '住所 TextBox4.Value = Worksheets("顧客データ").Cells(r, 1) '電話番号 TextBox5.Value = Worksheets("顧客データ").Cells(r, 2) '顧客番号 End If End With End Sub Private Sub CommandButton3_Click() 'クリックすると  Worksheets("検索").Cells(, 2) ’このシートの(G2)に上記の電話番号が入力される End Sub

  • このマクロを少し修正したい

    先日、こちらのサイトで下記のマクロを作っていただきました。 エクセルの置換えシートを使って、別のエクセルシートを一括置換えするマクロです。 ただ、置換えしたいシートのセルが結合していたり、文字の前に空欄が入っていると変換されません。 上記も認識しての置換えは、下記のマクロを修正して可能でしょうか? 修正したマクロを教えていただけると助かります。  With ThisWorkbook   If ActiveSheet Is .Worksheets(1) Then Exit Sub   For i = 1 To .Worksheets(1).Range("A65536").End(xlUp).Row    ActiveSheet.Cells.Replace _      What:=.Worksheets(1).Range("A" & i).Value, _      Replacement:=.Worksheets(1).Range("B" & i).Value, _      LookAt:=xlPart, SearchOrder:=xlByColumns   Next  End With End Sub

  • エクセルで四者択一の問題を作りたい。・フォーム画面のボタンをクリック、解答、採点画面を出したい。

    一応、フォーム画面で、ボタンをクリックするとデータシートから 持ってきて、それを問題がなくなるまで繰り返したいのですが、うまく いきません。 Private Sub cmd次_click() Dim n As Integer For n = 3 To Cells(Rows.Count, 1).End(xlUp).Row txt設問.Value = Worksheets("データ").Cells(n, 1).Value   txt問1.Value = Worksheets("データ").Cells(n, 2).Value txt問2.Value = Worksheets("データ").Cells(n, 3).Value txt問3.Value = Worksheets("データ").Cells(n, 4).Value txt問4.Value = Worksheets("データ").Cells(n, 5).Value n = n + 1 Next n End Sub Private Sub cmd判定_click() If op3.Value = True Then txt正解.Value = "○" Else txt正解.Value = "×" End If End Sub Private Sub cmd消去_Click() txt設問.Value = "" txt問1.Value = "" txt問2.Value = "" txt問3.Value = "" txt問4.Value = "" txt正解.Value = "" op1.Value = "" op2.Value = "" op3.Value = "" op4.Value = "" End Sub よろしければ、教えていただけないでしょうか?

  • 2つのVBAを組み合わせる方法

    お世話になります、2つのVBAを組み合わせる方法で迷っています。 1つ目が Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, k As Long, myNum As Long If Intersect(Target, Range("C1,B9:B39")) Is Nothing Or Target.Count > 1 Then Exit Sub Application.EnableEvents = False With Target If .Column = 3 Then myNum = WorksheetFunction.Max(Range("B9:B39")) If IsDate(.Value) Then For i = 9 To 39 If Cells(i, "A").Value = "" Then Cells(i, "B").Value = "" Else Cells(i, "B") = myNum + i - 8 End If Next i End If Else i = .Row If .Value = "" Then Range(Cells(i + 1, "B"), Cells(39, "B")).ClearContents Else For k = i + 1 To 39 If Cells(k, "A").Value = "" Then Cells(k, "B").Value = "" Else Cells(k, "B") = Cells(k - 1, "B") + 1 End If Next k End If End If End With Application.EnableEvents = True End Sub です。 2つめが Private Sub Worksheet_Change(ByVal Target As Range)  Application.EnableEvents = True If Intersect(Target, Range("R8:R38")) Is Nothing Then Exit Sub Application.EnableEvents = False Range(Cells(Target.Row, 18), Cells(39, 18)).Value = Target.Value Application.EnableEvents = True End Sub です。2つのPrivate Sub Worksheet_Change(ByVal Target As Range)イベントのVBAですが、どのようにして組み合わせれば良いのでしょうか?

  • エクセル マクロ

    よろしくお願いします。 エクセルのテキストに従って勉強していて コード抜けがないことも確認したのですが 「ifに対するend ifがありません」と表示されます。 デバックを開いてもブレークポイントが表示されていないので よくわかりません。 どこが問題かご享受ください。 Private Sub CommandOK_Click() Dim Row As Integer Row = Range("D1").Value + 3 If 会員登録画面.氏名カナ.Value = Empty Then MsgBox ("氏名カナが空欄です") Exit Sub End If If 会員登録画面.氏名漢字.Value = Empty Then MsgBox ("氏名漢字が空欄です") Exit Sub If Not IsDate(会員登録画面.年.Value & _ "/" & 会員登録画面.月.Value & _ "/" & 会員登録画面.日.Value) Then MsgBox ("生年月日の形式が正しくありません") Exit Sub End If Cells(Row, 1).Value = 会員登録画面.会員番号.Value Cells(Row, 2).Value = 会員登録画面.氏名カナ.Value Cells(Row, 3).Value = 会員登録画面.氏名漢字.Value If 会員登録画面.男.Value = True Then Cells(Row, 4).Value = "男" Else Cells(Row, 4).Value = "女" End If Cells(Row, 5).Value = DateValue(会員登録画面.年.Value & _ "/" & 会員登録画面.月.Value & _ "/" & 会員登録画面.日.Value) Cells(Row, 6).Value = 会員登録画面.都道府県.Value Cells(Row, 7).Value = 会員登録画面.電話番号.Value If 会員登録画面.スポーツ観戦.Value = True Then Cells(Row, 8).Value = "○" End If If 会員登録画面.映画鑑賞.Value = True Then Cells(Row, 9).Value = "○" End If If 会員登録画面.読書.Value = True Then Cells(Row, 10).Value = "○" End If If 会員登録画面.釣り.Value = True Then Cells(Row, 11).Value = "○" End If If 会員登録画面.ドライブ.Value = True Then Cells(Row, 12).Value = "○" End If If 会員登録画面.旅行.Value = True Then Cells(Row, 13).Value = "○" End If Range("D1").Value = Range("D1").Value + 1 Call 画面初期化 End Sub

  • DTPickerで入力したらの検索が出来なくなりました。

    お世話になります。 質問ですが 以下のVBAコードがあります。Sheet3のCells(2, 6)に記入した日付によってSheet1の検索を一部行うのですが、Cells(2, 6)への入力をDTPickerを使って行うようにしたら該当する日付がありませんのエラーが帰ってきます。たぶん書式が違うせいかなと思うのですがどうすればいいのでしょうか? どなたか分かる方いらっしゃいますか?よろしくお願いします。  Private Sub CommandButton1_Click() Dim trgA As Variant, trgB As Variant With Worksheets("Sheet3") If IsEmpty(.Cells(2, 7)) Then MsgBox "個数が空です。", vbCritical: Exit Sub '日付 trgA = Application.Match(.Cells(2, 6).Value2, Worksheets("Sheet1").Range("A:A"), 0) If IsError(trgA) Then MsgBox "該当する日付がありません。", vbCritical: Exit Sub '製品名 trgB = Application.Match(.Cells(2, 4).Value, Worksheets("Sheet1").Range("2:2"), 0) If IsError(trgB) Then MsgBox "該当する製品名がありません。", vbCritical: Exit Sub If Worksheets("Sheet1").Cells(trgA, trgB + 1).Value = "" Then Worksheets("Sheet1").Cells(trgA, trgB + 1).Value = .Cells(2, 7).Value Else If MsgBox("上書きしますか", vbQuestion + vbOKCancel) = vbOK Then Worksheets("Sheet1").Cells(trgA, trgB + 1).Value = .Cells(2, 7).Value End If End If End With End Sub