エクセルVBA セルの移動について

このQ&Aのポイント
  • エクセルVBAでA1~A8のセルに入力された文字に応じてB1~B8にセルを移動させる方法を教えてください。
  • VBAを使用して、A1~A8のセルに特定の文字が入力された場合、それに対応するBのセルに移動する方法を教えてください。
  • エクセルVBAで、A1~A8のセルに「あ」が入力された場合はB1に、A2に「あ」が入力された場合はB2にセルを移動させる方法を教えてください。
回答を見る
  • ベストアンサー

エクセルVBA セルの移動について

今困っているのですが、A1~A8のセルに”あ”もしくは”い”が入ったときにB1のセルにとあるセルのリストを入力規制かけて、表示させるというVBAを作成中です。 と・・・そこまではできたのですが、希望としては、A1に文字が入った場合はセルを自動的にB1に移動させたいのです。 それと同じようにA2のときはB2、A3のときはB3にセルを持って行きたいのですが、どうしたらいいでしょうか。 どなたかわかる方、よろしくお願いいたします。 For i = 1 To 8 Select Case Cells(i, 1) Case "あ" Cells(i, 2).Activate Application.CutCopyMode = False With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$F$1:$F$10" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With Case "い" Selection.Cells(i, 2).Activate CutCopyMode = False With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$G$1:$G$10" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With Enxt End Sub

  • nanny
  • お礼率55% (72/129)

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

  • ベストアンサー
  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.3

これでどうでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Integer Dim rg As Range Dim sw As Boolean sw = False For i = 1 To 8 If Target.Address = Cells(i, 1).Address Then Cells(i, 2).Activate Set rg = Cells(i, 2) sw = True End If Next i If sw = False Then Exit Sub Select Case Target Case "あ" rg.Activate CutCopyMode = False With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$F$1:$F$10" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With Case "い" rg.Activate CutCopyMode = False With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$G$1:$G$10" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With Case Else rg.Activate CutCopyMode = False With Selection.Validation .Delete .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _ :=xlBetween .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With End Select End Sub これをシート名のところを右クリック「ソースの表示」で表示されるソースを記述するウインドウにコピペしてみてください。

nanny
質問者

お礼

うわ~ ありがとうございます!! 完璧です!! これでやっと望むものが出来そうです。本当にありがとうございました

その他の回答 (3)

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.4

#3ですが、回答の最後のほう「ソースの表示」ではなくて「コードの表示」でした。すみません。

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.2

このようなものでどうでしょうか? Private Sub Worksheet_Change(ByVal Target As Range)  Dim i As Integer  For i = 1 To 8   If Target.Address = Cells(i, 1).Address Then    Cells(i, 2).Activate   End If  Next End Sub

nanny
質問者

お礼

すいません それについてもう少し質問なんですが、 この構文を、どの辺につけたらうまく行くでしょうか。 いろいろ試したんですけど、For~Nextの間でやっぱりA1へ入力してもB2へ移動してしますんです。一瞬はB1へ移動するのは見えるんですけどね;;

nanny
質問者

補足

A1へ入力したらA8でした。すいません

  • norakuma
  • ベストアンサー率29% (293/977)
回答No.1

それぞれのCaseの一番下の end with の下の行に Selection.Cells(i, 3).Activate じゃだめですかね? 試してないけど。

関連するQ&A

  • エクセル2010で入力規則をVBAで記述

    エクセル2010で入力規則をVBAで記述したいです。 まずは、マクロの自動記録すると以下のコードが保存できました。 Selectionをrange("A1")に変更したのですが、エラーが出てきました。 With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="東京,ニューヨーク" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With 調べると Operator:=xlBetweenではなくて、Operator:=xlEqualだと思うのですが、 それでもだめでした。

  • エクセルマクロ

    エクセルマクロでダブルクリックしたら入力規制を解除するようにしたいです。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ Cancel As Boolean) With Selection.Validation .Delete .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _ :=xlBetween .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With End Sub でうまくいったのですが、シートの保護をしていると対象セルを保護しない、にしていてもできません。 何かよい方法はありませんか? 入力規制をしてリストを選択にしている場所に、直接入力したい場合があるのでそれを簡単にダブルクリックで解除できないか、というのが狙いです。 よろしくお願い致します。

  • ExcelVBA2000で入力規則の設定

    こんにちは。 ExcelVBA2000を使用して入力規則を設定しようと思うのですが、エラーが発生してしまい困っています。 ”1004 アプリケーション定義またはオブジェクト定義のエラーです。” が発生します。 ↓マクロの保存で取得できた内容は With Selection.Validation .Delete .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=AND(A1=JIS(A1),LENB(A1)<=70)" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With なのですが、これを再び実行させようとすると、エラーが発生します。 ご存知の方いらっしゃいましたら宜しくお願い致します。

  • エクセル入力規則のマクロについての質問です。

    エクセル入力規則のマクロについての質問です。  excel2003 os=WindowsXP の環境です。  E列の10行目から57行目、I列の10行目から60行目に1から9999までの数字のみ入力可能の条件を設定しようと下記のプログラムを作ったのですが、全く動いてくれません。ご教授のほどよろしくお願いします。  Private Sub Worksheet_Activate() Range("e10:e48").Select With Selection.Validation .Delete .Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:="0", Formula2:="9999" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "入力制限があります" .InputMessage = "" .ErrorMessage = "登録は9999までしか登録できません。9999以下のの数字を入力下さい。" .IMEMode = xlIMEModeAlpha .ShowInput = True .ShowError = True End With Range("i10:i60").Select With Selection.Validation .Delete .Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:="0", Formula2:="9999" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "入力制限があります。" .InputMessage = "" .ErrorMessage = "登録は9999までしか登録できません。9999以下のの数字を入力下さい。" .IMEMode = xlIMEModeAlpha .ShowInput = True .ShowError = True End With End Sub

  • Excel VBA 入力規則

    Excel VBAで、下記の様なコードを見ましたが、IgnoreBlank の意味がよく分かりません。 入力規則の「空白云々」のことだと思いますが、よろしくお願いします。 Sub setKiValidation() Dim d As Date ld = DateSerial(Year(Range("$A$1")), Month(Range("$A$1")) + 1, 0) With Range("休日").Validation .Delete .Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:="1", Formula2:= _ "=DAY(DATE(YEAR($A$1),MONTH($A$1)+1,0))" .IgnoreBlank = True .InCellDropdown = True .InputTitle = Month(ld) & "月 休日" .ErrorTitle = Month(ld) & "月 休日" .InputMessage = "数値(1~" & Day(ld) & ") を入力してください" .ErrorMessage = "数値(1~" & Day(ld) & ") を入力してください" .IMEMode = xlIMEModeOff .ShowInput = True .ShowError = True End With ' =SUM(IF(B19:B22<>"",1/COUNTIF(休日,B19:B22),)) ' =AND(0<COUNTIF(休日,DAY(A3)),MONTH(A3)=MONTH($A$1))

  • 【Excel VBA】チェンジイベント

    Excel2003を使用しています。 マクロの記録を元に、チェンジイベントを下記のように作成しました。 下記は、B列の11行目以降のセルのデータが変化したら、その行のF列に入力規則を設定するように作成したつもりです。 テストもしてみましたが、きちんと動作しました。 さらに、B列の11行目以降のセルのデータがクリアされたら、その行のF列に設定した入力規則もクリアしたく  If Target.Columns(2).ClearContents And Target.Row >= 11 Then   Cells(Target.Row, 6).Validation.Delete  End If 分からないながらにも、↑このように追加して試してみたのですが、何も動作しなくなりました(^_^;) こういう場合は、どのようにコードを書いたらいいのでしょうか? よろしくお願いします。 -------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Column = 2 And Target.Row >= 11 Then   With Cells(Target.Row, 6).Validation    .Delete    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _    xlBetween, Formula1:="=$F$3:$F$7"    .IgnoreBlank = True    .InCellDropdown = True    .InputTitle = ""    .ErrorTitle = ""    .InputMessage = ""    .ErrorMessage = ""    .IMEMode = xlIMEModeNoControl    .ShowInput = True    .ShowError = False   End With  End If End Sub ------------------------------------------------

  • マクロで入力規則を設定すると日付が文字列になる不具合が・・・・

    エクセル2000です。 以下はG10セルに手作業で「入力規則」を設定するところをマクロの記録で残したものです。 リストは、2008/11/1,2008/11/5,2008/11/30 と yyyy/m/d 形式で手入力しましたが、なぜか記録では 11/1/2008,11/5/2008,11/30/2008 と m/d/yyyy 形式になっています。 手作業で設定した入力規則は正しく作動し、セルに表示されるドロップダウンリストも手入力どおり yyyy/m/d になっています。 ところが、記録したこのマクロをそのまま作動させると、今度はリストは m/d/yyyy になり、しかも日付ではなくなんと文字列になってしまうのです。 マクロを手直しし、 xlBetween, Formula1:="11/1/2008,11/5/2008,11/30/2008"を xlBetween, Formula1:="2008/11/1,2008/11/5,2008/11/30"にしても同じ結果( m/d/yyyy かつ文字列)となります。 なにがいけないのでしょうか??? Sub Macro4() ' ' Macro4 Macro ' マクロ記録日 : 2008/10/31 ユーザー名 : MerlionXX Range("G10").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="11/1/2008,11/5/2008,11/30/2008" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "指定日" .InputMessage = "" .ErrorMessage = "リストの中から選んでね。" .IMEMode = xlIMEModeDisable .ShowInput = True .ShowError = True End With End Sub

  • エクセルのマクロの手直し

    お世話になります。 以下はエクセルの入力規則(リスト)をマクロに記録したものです。(マクロ名はリスト) 下の例では、C列の33~44行にリストの項目が入力されています。 この $C$33:$C$44 の範囲を、C33~C列のうちデータが入力されている一番最後の行(行番号が最大) までとするにはどうすればいいのでしょうか。(先頭のC33は不変) ちなみにこのリストは数字だけでなく文字も含めて考えます。 いったん一番下の行番号を、影響のない他のセルに表示させてから、マクロに記録しても可。 Excel2000です。 よろしくお願いします。 Sub リスト() ' ' リスト Macro ' マクロ記録日 : 2002/7/23 ユーザー名 : ' ' Range("D51:D70").Select ActiveWindow.SmallScroll Down:=-9 With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$C$33:$C$44" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With Range("C45").Select End Sub

  • マクロで入力規則の他の設定を残しIME制御のみ変更

    お世話になります。 Excel2013を使用しています。 今マクロで、選択したセルの入力規則にIME制御(On/OFF)をセットするマクロを作成したいと考えております。 最初、自動記録したものをそのまま保存して使っていましたが、 それを利用すると、選択したセルの入力規則の他のルールまで上書きされてしまっていることに気づきました。 具体的には、たとえば、入力規則の「入力値の種類」を「リスト」にして、値を「東京,大阪,名古屋」に設定し、この3種類をプルダウンリストから選べるようにしていたセルに上記のマクロを実行すると、IMEの自動切り替えはうまく変わっていたのですが、 入力値の種類で「リスト」にしていた設定までもが「すべての値」に上書きされてしまっていました。 自動記録したマクロでは、 With Selection.Validation .Delete .Add Type:=tp, AlertStyle:=xlValidAlertStop, Operator _ :=xlBetween .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeHiragana ・・・(1) .ShowInput = True .ShowError = True End With となっていましたので、(1)以外の他の部分が余計なのかと思い、 Selection.Validation.IMEMode = xlIMEModeHiragana としましたところ、エラーが発生していました。 そこで、いろいろ調べて With Selection.Validation .Delete .Add Type:=xlValidateInputOnly .IMEMode = xlIMEModeHiragana End With としてみましたが、やはり「入力値の種類」が「すべての値」おに書き換わってしまっていました。 恐らく.Deleteのところで「リスト」の設定が一旦クリアされているように思うので、そこを消したいのですが、消すと、どうやら.Deleteがないといけないらしくエラーが発生してしまいます。 「入力値の種類」を「リスト」のまま残しつつ、IME制御の設定だけをマクロから変更する このような場合のうまいやり方がございましたら、お教え願えますでしょうか。 よろしくお願い致します。

  • すみません、質問の内容を変更します。【VBA リスト操作】

    With Worksheets("シート名").Range("A1").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="該当なし" End With というように、VBAでA1のセルに対して、「該当なし」というプルダウン(入力規則)を設定し、「該当なし」がすでに選択された状態、若しくはタイトル的な感じで「該当なし」とセルに表示させる方法をお願いします。 前の質問を削除したいのですができません。 ご了承ください。 よろしくお願いいたします。

専門家に質問してみよう