VBAで4桁以下の隣の文字列のセルを操作する方法

このQ&Aのポイント
  • 【VBA】隣のセルが4桁以下の場合に操作する方法を教えてください。
  • VBAを使用して、セルの値が4桁以下の場合に隣のセルを操作する方法を知りたいです。
  • WINDOWS7 EXCELL2010で、VBAを使用してセルの値が4桁以下の場合に隣のセルを操作する方法について教えてください。
回答を見る
  • ベストアンサー

VBA 隣の文字列のセルが4桁以下の時

いつもお世話になります。 WINDOWS7 EXCELL2010 です。 下記のマクロはWクリックでB列に ○ 印ができるマクロです。 この ○ 印はA列にある沢山あるシート一覧で不必要になったシートのみを選択し別のマクロで削除するためです。 A列には別のマクロでシートの一覧を 2桁 3桁 と 4桁の文字列が入り混じっています。 例えば  入力 検索 利用 シート / 0101 1231 1117 (0101~1231) のように。 現在は誤ったシートの削除の防止をするために 条件付書式( =(LEN($A2)>3)*($A2<>"") )でB列に色付けして○印が入力できるセルを示しています。 ただ色付けでは完全には防止できないので下記のマクロの中で何とか処理できないものかと御指導いただけたら幸いです。 御指導願いたいのは、A列が >3文字 の時だけに ○ 印がWクリックして入力したい。 ※下記のマクロの中で、 If Len(Target Range(“A2:A51)) < 4 Then ‘A2~A51の範囲で4文字以下の時はB2~B51には入力できず End If は私が考えたイメージです。 参考 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("A2:A51")) Is Nothing Then 'この範囲がWクリックされた時 Cancel = True Sheets(CStr(Target.Value)).Select ElseIf Not Application.Intersect(Target, Range("B2:B51")) Is Nothing Then 'この範囲がWクリックされた時 Cancel = True Target = IIf(Target = "", "○", "") End If If Len(Target Range(“A2:A51)) < 4 Then ‘A2~A51の範囲で4文字以下の時はB2~B51には入力できず End If End Sub

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)  If Not Intersect(Target, Range("A2:A51")) Is Nothing Then  'この範囲がWクリックされた時   Cancel = True   Sheets(CStr(Target.Value)).Select  ElseIf Not Application.Intersect(Target, Range("B2:B51")) Is Nothing Then  'この範囲がWクリックされた時   if len(cells(target.row, "A")) = 4 then   ’その行のA列の長さが    Cancel = True    Target = IIf(Target = "", "○", "")   end f  End If End Sub

dorasuke
質問者

お礼

早速の御指導を頂きありがとうございました。 他の人がこの質問を見ることがあるかもしれないので捕捉させていただきました。 end f にiを追加 end if いつもいつもご指導を感謝しています。

関連するQ&A

  • targetをA列のセルに限定するには?

    『A列のセルに変更があったときのみ実行する』マクロを組みたいと思っています。 『If Target.Column = 1 Then』で条件をつけたのですが、これではA列と同時に他の列を同時に変更した場合、A列以外のセルも対象になってしまいます。 文章ではうまく説明できないので、具体例を挙げたいと思います。 シートに下記マクロを設定しました。 (1)A1~A30を選択しDeleteボタンを押すとB1~B30に1~30の数値が入力されます。 (2)次にA1:J30を選択しDeleteボタンを押すとB1:B30に(1)の時の10倍の数値が入力されます。 A1:J30を選択した場合でも(1)の時と同じ結果を出すにはどうすればよろしいでしょうか? また、このマクロを実行したときに処理に時間がかかるときとかからないときがあるのですが、その理由もわかる方がいらっしゃれば是非教えていただけないでしょうか? 拙い文章でわかりづらくなってしまいましたが、どうか宜しくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Dim tRANGE As Range i = 1 If Selection.Count > 1 Then For Each tRANGE In Target Range("A1").Offset(tRANGE.Row - 1, 1) = i i = i + 1 Next End If End If End Sub

  • VBA 検索して一致したセルへジャンプさせたい

    Excelにて、シート1のA列とシート2のA列のデータにNoを入れます。 シート1のA列のNoをクリックすると、シート2のA列の同じNoにジャンプするマクロを組みたいです。 現在組んでいるマクロは、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim Sht As Worksheet Dim Rng1 As Range Dim Rng2 As Range Dim FindCell As Range Set Sht = Worksheets("シート2") Set Rng1 = Range("A2:A100") Set Rng2 = Sht.Range("A2:A100")If Intersect(Target, Rng1) Is Nothing Then Exit Sub If Target.Count > 1 Then Exit Sub Set FindCell = Rng2.Find(Target.Value) If Not FindCell Is Nothing Then Application.Goto Reference:=FindCell, Scroll:=False End If End Sub です。 一応マクロは実行されますが、そうすると、シート1のA列の編集(Noを追加したり変更したり・・・)できません。 編集や変更もできて、検索マクロも実行できるというマクロの組み方はありますでしょうか?

  • VBA シート間の同期(列、行、選択範囲)

    初めての質問となります。 よろしくお願いいたします。 シート間の同期でセルの同期は他の質問を参照してできましたが、 ”行”や”列”での同期/相互参照は、どのように書けばいいのでしょうか。。 下記、sheet1”A1”とsheet2の”B1”に記載したcodeです。 'sheet1に以下を記述 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Sheets("Sheet2").Range("$B$1").Value = Sheets("Sheet1").Range("$A$1").Value End If End Sub 'sheet2に以下を記述 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$1" Then Sheets("Sheet1").Range("$A$1").Value = Sheets("Sheet2").Range("$B$1").Value End If End Sub 【質問内容】 sheet1の”A列”とsheet2の”B列”はどう書くのでしょう? 上記の方法では無理、または負荷が大きい場合は、 sheet1の”A1:C3”とsheet2の”D4:F6”はどう書くのでしょう? という内容になります。 先日からVBAを触り始め、 自分なりに調べて一通り試してみましたが解決できませんでした。。 お手数おかけしますが何卒よろしくお願いいたします。

  • Excel VBA セルの双方向同期のエラーについ

    エラーが発生して理由がわからないので、どなたか助言をお願いします。 以下のVBAにて、目的のセルにデータを入力すると、1回目は必ず添付写真の通りのエラーが出まして、デバッグをすると3行目が黄色でハイライトされます。 記述は以下の通りです。どうぞよろしくお願いします。 シートAへのVBA設定 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Sheets("シートB").Range("$B$1").Value = Sheets("シートA").Range("$A$1").Value End If End Sub シートBへのVBA設定 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$1" Then Sheets("シートA").Range("$A$1").Value = Sheets("シートB").Range("$B$1").Value End If End Sub

  • エクセル2003 VBAでセル移動

    いつもお世話になります。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row > 9 Then If Target.Column = 3 Then Cells(Target.Row, 4).Select ElseIf Target.Column > 5 Then Cells(Target.Row + 1, 1).Select End If End If End Sub これで、B列からC列を飛ばしてD列にセル移動して取りあえずの目的は達成しているのですが、 D列からB列には方向キー移動してくれません。Target.Columnが3になるんで当たり前なんですが・・・ B列の入力ミスがあるときマウスで移動させるか、A列まで戻ってから方向キーで上に上がるかです。 何かいい方法ありませんでしょうか。D列から方向キーで戻るときも、出来ればC列を飛ばしてほしいです。 よろしくお願いします。

  • ExcelVBA 二つのセルに入力された時の判定

    セルA1とA2両方に値が入力された時、セルA3に文字を入力するマクロを作りたいです。 下記プログラムで試しているのですが、ステップインで見ると最初のIFでTrue判定されてしまいます。 どうすればこの条件を満たすマクロになるのか、教えて頂けないでしょうか。 以上、宜しくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Or Intersect(Target, Range("A2")) Is Nothing Then Exit Sub Else If Range("A1").Value <> "" And Range("A2").Value <> "" Then Range("A3").Value = "入力済み" End If End If End Sub

  • VBA A1セルが空白になったら隣のセルも空白に

    いつもお世話になります。 WINDOWS7 EXCELL2010 です。 A1セルに文字列で5桁のID番号を入力するとI4のセルに今日の日付が入るようにマクロを作っています。 このときA1セルをキーボードのBacksPaceでID番号を消してエンターキーを押した時にI4セルも空白にしたいと考えて下記のように作りましたが If Range("A1") = “” Range("$I$4") = "0000/00/00" Else Range("$I$4").ClearContents 上の構文が上手くゆかず困り果てました。 どのようにすればいいか御指導願えませんでしょうか。 参考に Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Range("I4").Value = Date If Range("A1") = “” Range("$I$4") = "0000/00/00" Else Range("$I$4").ClearContents End Sub

  • VBA 文字列に関して

    現在 A22のセルに入力された文字列をボタンを押せば ばらばらにしてA22のセルから順番に入れるマクロを作りました (例)A22のセルに ”こんにちわ”の文字列が入っている場合 ボタン押下   ↓ A22のセル⇒こ B22のセル⇒ん C22のセル⇒に D22のセル⇒ち E22のセル⇒わ になる。 不思議なことに数字を16文字以上いれてボタンを押し文字を分離すると入力していない文字、数字が入ってしまいます。 数字だけこういう現象が発生してしまいます。 例えば "1111111111111111"と入力して文字を分離した場合 1.11111111111111E+15と個々のセルに格納されます。 原因がわかる方、教えて頂けないでしょうか? 以下がコードです。宜しくお願い致します。 Private Sub CommandButton1_Click()   Dim one As String   Dim myString As String   myString = Cells(22, 1)   numString = Len(Cells(22, 1))   If Len(myString) <= 50 Then    For i = 1 To Len(Range("A22").Value)      one = String(1, myString)      Cells(22, i) = one      myString = Replace(myString, one, "", 1, 1, vbTextCompare)    Next i   End If End Sub

  • VBAで別の列のセルにも色付け~2

    WINDOWS XP EXCELL 2003です。 いつもお世話になります。 ご迷惑とは重々と承知しながら再度質問させていただきます。 1 御指導を賜りたいのは、 現在A列には月度を示す 01~12 が入力され月別にセルの背景色を塗りつぶしていますがこれをA列用のマクロを工夫してF列にも同様に適用したい。 例えば参照図で言うと A7 05 ピンク  A8 05 ピンク A9 06 ライトブルー  A10 07 草色 等のように ※ 参照図のF列のセルには背景色は適用していません。 2 参照図のそれぞれの設定は、   ※ 計画 と 生産はセル位置だけの違いで生産の方は割愛します。 D1 ユーザー定義 mm/dd D2 ユーザー定義 200000 D3 数値 A7 ユーザー定義 mm マクロ ボタン「計画入力」 Sub 計画入力() Dim GYOU '追加 GYOU = Range("C65536").End(xlUp).Row + 1 Cells(GYOU, 2).Value = Range("D1").Value Cells(GYOU, 3).Value = Range("D2").Value Cells(GYOU, 4).Value = Range("D3").Value End Sub ボタン「セルセット」 Sub 計画セル()    Range("D1,D2,D3,D1").Select End Sub A列のセル塗りつぶし Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row >= 8 And Target.Address = Cells(Rows.Count, "C").End(xlUp).Address Then Target.Offset(0, 0).Value = Date End If Dim c As Integer If Target.Column <> 2 Then Exit Sub If Target.Value = "" Then c = 0 Else On Error GoTo line Select Case Month(Target.Value) Case 1: c = 46 Case 2: c = 4 Case 3: c = 39 Case 4: c = 6 Case 5: c = 7 Case 6: c = 8 Case 7: c = 43 Case 8: c = 3 Case 9: c = 44 Case 10: c = 24 Case 11: c = 40 Case 12: c = 17 End Select End If Target.Offset(0, -1).Interior.ColorIndex = c Target.Offset(0, -1).Font.ColorIndex = IIf(c = 1, 2, 0) Exit Sub line: Target.Offset(0, -1).Interior.ColorIndex = 0 Target.Offset(0, -1).Font.ColorIndex = 0 End Sub 御指導よろしく御願いします。

  • Excelでセルの値を変化させた時にマクロを実行するには?

    "A1"のセルに値を入れるとマクロが実行するように組んだのですが、問題が発生しました。 Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("A1") Then      cells(1,2)=5      ・・・・ End If End Sub ここでA1に"5"を入力すると、B1に5と入力されるのですが、Target=5と認識してしまい、A1と同じ値になるので無限ループになってしまいます。 なにか回避策はないでしょうか? よろしくお願いします。

専門家に質問してみよう