エクセルで数字を入力すると隣のセルに特定の文字に変換する方法
- エクセルで数字を入力すると、隣のセルに特定の文字に変換する方法について、VLOOKUP関数を使用せずにプログラムを利用することができます。
- 国別電話番号の表を作成する際に、数字を入れたセルの隣のセルに特定の文字を反映させるために、上記のプログラムを使用することができます。
- 初心者の方でも簡単に利用することができるので、プログラムを追加することで目的の結果を得ることができます。
- ベストアンサー
エクセルで数字を入力すると隣のセルに特定の文字に変換する方法
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count <> 1 Then Exit Sub Application.EnableEvents = False Select Case Target.Value Case 93 Target.Value = "アフガニスタン" Case 971 Target.Value = "アラブ首長国連邦" Case 967 Target.Value = "イエメン共和国" End Select Application.EnableEvents = True End Sub 国別電話番号の表を作りたいのですが、VLOOKUP関数を使用せずに上記のプログラムを利用して数字を入れたセルの隣のセルに特定の文字を反映させたいのですが、初心者の為に苦労しております。 どのようなプログラムを付け加えたら良いのかお教えください。 よろしくお願いいたします。
- ns_
- お礼率85% (29/34)
- オフィス系ソフト
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>Target.Value = "アフガニスタン" ↓のようにするだけでは? Target.Offset(,1).Value = "アフガニスタン" 表があって、それを参照するなら、 Findメソッド が使えると思います。
関連するQ&A
- VBAによる数字入力で文字列表示
いつもお世話になります。 WIN7 EXCELL2010です。 一つのシートに4ヶ月分があって合計3つのシートがあります。 1月のみの記入するところのマクロは下記のマクロのように何とか作成しました。 一つのシートでRangeが4ヶ所に分かれている場合で B6:B8(下記のマクロ) B18:AF20 B30:AF32 B B42:AF44 ですが下記のマクロをどう変えればベストかを誠に申し訳ありませんがご指導いただけないでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) With Target If Intersect(Target, Range("B6:AF8")) Is Nothing Then Exit Sub .Font.ColorIndex = 0 Application.EnableEvents = False Select Case .Value Case 0: .Value = Empty Case 1 To 3 .Value = Choose(.Value, "営業", "休日", "特休") Case 4 To 9 .Value = Choose(.Value - 3 , "出勤",”代休”,”有給”,”休出”,”遅刻”,”早退”) End Select Application.EnableEvents = True End With End Sub
- ベストアンサー
- その他MS Office製品
- VBA/エクセルの日付入力でYYYYMMDD
エクセル2013です。 特定のセルに日付を入力してもらうのですが、人によりさまざまな入力をされてしまいます。 どんな入力でも日付であれば、シリアル値なのであとからなんとかなるのですが、困るのはYYYYMMDDの連続数字、例えば今日なら20140712と入力されてしまうことです。 入力規則で排除したいのですが、それは許されず、20140712も日付として扱わなければならなくなりそうです。 そこでマクロで対処しようと以下のコードを書きました。 Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address(0, 0) Case "D2", "F2", "C4" If Target.Value = "" Then Exit Sub If IsDate(Target.Value) Then Target.NumberFormatLocal = "yyyy/m/d" Else Application.EnableEvents = False Target.Value = CDate(Format(Target.Value, "@@@@/@@/@@")) Application.EnableEvents = True End If Case Else Exit Sub End Select End Sub これで最初はうまくいき、20140712と入力されても、ちゃんと2014/7/12になります。 ところが、同じセルに再度YYYYMMDD数字形式で入力すると、実行時エラー「オーバーフローしました」になってしまいます。多分セルが、YYYYMMDDの数字をシリアル値として見てありえない日付と判断したのだと思います。 どのようにコードを修正したらよろしいでしょうか? もう1点、日付をYYYYMMDDの連続数字で入力することは普通、エクセルではあまり見たことないですが、これって一般的な方法なのでしょうか?
- ベストアンサー
- Excel(エクセル)
- Find,Offsetを使ってセルを指定する方法
エクセルVBAのことで伺います。 以下の記述は、「D3からQ3までのセルの中で「年」と入ったセルの左横のセルを探し、 その中の値(西暦の年が入っています)を、G4からI100までの範囲に入力される月日 の年として置き換える」といったものなのですが、エラーが出てしまいます。 「実行時エラー424、オブジェクトが必要です。」とのメッセージが表示され、デバックを クリックすると、「Set FoundCell = Range("D3:Q3").Find("年").Offset(0, -1).Select」 が黄色く強調表示されています。 プログラムの記述をどのように修正すれば良いか、どなたかお教えください。 よろしくお願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) Dim FoundCell As Range Set FoundCell = Range("D3:Q3").Find("年").Offset(0, -1).Select With Target If Intersect(Target, Range("G4:I100)) Is Nothing Or Target.Count <> 1 Then Exit Sub If IsDate(.Value) Then If Year(.Value) <> FoundCell Then Application.EnableEvents = False .Value = DateSerial(FoundCell, Month(.Value), Day(.Value)) Application.EnableEvents = True End If End If End With End Sub
- ベストアンサー
- Excel(エクセル)
- 入力用のセルと管理用のセルを分けるには??
Private Sub Worksheet_Change(ByVal Target As Range) Dim myC As String Dim x As Range If Intersect(Target, Range("A1,C2,D4")) Is Nothing Then Exit Sub Select Case Target.Address(0, 0) Case "A1": myC = "E" Case "C2": myC = "F" Case "D4": myC = "G" End Select If Cells(Rows.Count, myC).End(xlUp).Value = "" Then Set x = Cells(Rows.Count, myC).End(xlUp) Else Set x = Cells(Rows.Count, myC).End(xlUp).Offset(1) End If x.Value = Target.Value End Sub 入力用セルと、管理用のセルを分けたい・・・・・ という質問をしてこのマクロを教えていただいたんですが、 実際には入力用にしたいセルが、40箇所以上ありまして 一つ一つ反映させるのではなく、すべての箇所に入力して確認後に まとめて反映させたいのですが不可能でしょうか?? 何か方法があるようでしたらヨロシクお願いします!! エクセル2003です。
- 締切済み
- オフィス系ソフト
- エクセルで特定のセルへの直接入力だけを禁止したいんです。
過去の質問を参考に『セルをダブルクリックすると"○"と入力される』というマクロを○⇒●⇒-⇒ ⇒○⇒・・・として使っているんですが、ダブルクリックの度にセルが直接入力の状態(縦の棒の点滅)になってしまい、一度他のセルをクリックしないと次へ進めずに困っています。 良い方法ってあるのでしょうか? ちなみに使用しているマクロは Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const rng As String = "A1:A3" '処理対象のセル範囲 If Not Application.Intersect(Target, Range(rng)) Is Nothing Then If Target.Value = "" Then Target.Value = "○" ElseIf Target.Value = "○" Then Target.Value = "●" ElseIf Target.Value = "●" Then Target.Value = "-" Else Target.ClearContents End If End If End Sub というものです。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 個数入れた隣のセルに日付したい
Excel2000です。05-06-17に QNo 1455706でセルをクリックして日時を入れる方法をおそわりました。 No1manyu-manyu さまの 『ctrl』+『;』で日付、 『ctrl』+『:』で時刻を入れられるのは便利でしたが、一つのセルに両方を入れると2005/7/268:34の様につながってしまいます No2Wendy02 さまの以下のVBAはセルをクリックすると決定書式で入るのですが、これを K列(K4:K1000)に入荷個数の数値を入れたときL列(L4:L1000)のセルに表示するようにしたいのです。お助け ご教授ください。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Target, Range("L4:L1000")) Is Nothing Then Exit Sub 'L4:L1000"の範囲外は除外 If Not IsEmpty(Target.Value) Then Exit Sub '上書きはしない Application.EnableEvents = False Target.Value = Format$(Now, "mm/dd AM/PM hh:mm") Application.EnableEvents = True End Sub
- ベストアンサー
- オフィス系ソフト
- excel2007 VBで
下記のマクロ作成して実際にセルにA、あるいは何かデータを入力しても下記イベント?が発生している気配がありません。 Application.EnableEvents = Falseの行がなにか問題なのでしょうか。実プログラムは If Target.Value = "A" Or Target.Value = "A" Thenの他にB、C、計算も含んでいるのですがApplication.EnableEvents = TrueはEnd Subの前行に入れてあります。 他に設定することがあるのでしょうか。どなたか教えてください。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub '複数セルの入力は無視 Application.EnableEvents = False '割込み停止 ’[B3] = 123 ’Stop If Target.Value = "A" Or Target.Value = "A" Then Target.Value = "A" End If Application.EnableEvents = True '割込み再開 End Sub excel2007 VB6.5です。
- ベストアンサー
- その他MS Office製品
- 文字を入力したセル以降のセルも同じ文字になるVBA
Private Sub Worksheet_Change(ByVal Target As Range) Dim R As Range ActiveSheet.Protect UserInterfaceOnly:=True Set R = Union(Range("D5:D38"), Range("E5:E38"), Range("T5:T38")) With Target If Intersect(.Cells, R) Is Nothing Then Exit Sub Application.EnableEvents = False Range(Cells(.Row, .Column), Cells(38, .Column)).Value = .Value Application.EnableEvents = True End With End Sub この様なコードがあるのですが範囲を変更したいと思います。 D5:D38は上記コードのままで良いのですが、E5;E38はE5:E36に、T5:T38はT5:T36に変更するにはどうすれば良いのでしょうか?
- ベストアンサー
- Excel(エクセル)
- エクセルで特定の文字列の含まれるセルのある行の色を変更したいと思ってお
エクセルで特定の文字列の含まれるセルのある行の色を変更したいと思っておりますが、関数では出来ないようなのでVBAで作業をしております。なかなかうまくいかずで困ってしまっております。 下記のような関数でシート一枚は出来たのですが、それ以外のシートには反映がされません。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range If Application.Intersect(Target, Range("A2:A10000")) Is Nothing Then Exit Sub For Each r In Target If r.Column = 1 Then Select Case r.Value Case "○": r.Resize(1, 12).Interior.ColorIndex = 19 Case "×": r.Resize(1, 12).Interior.ColorIndex = 3 Case "△": r.Resize(1, 12).Interior.ColorIndex = 6 Case Else: r.Resize(1, 12).Interior.ColorIndex = xlNone End Select End If Next r End Sub 無知なので、ネットで調べて上記のような数式を拾ってきたのですが、どうやら1シート分の設定に書かれているようです。。。 全シートに反映がされるように設定をするにはどこをどのように書き換えればよろしいでしょうか。 お分かりの方がいらっしゃいましたら、よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- セルの時間入力について
以下のコードで 00:00と入力すると最初は入力でいますが、 2回目の入力から、ユーザー定義でもhh:mmなのにセルが空になります。 数字が入ると問題有りません。 式の値(関数の入力)は00:00:00となっています。 どうか教えていただけませんでしょうか。 よろしくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から If Intersect(Target, Columns("L:M")) Is Nothing Or Selection.Count <> 1 _ Or Not IsNumeric(Target) Then Exit Sub If Target <= 2359 And Target Mod 100 < 60 Then Application.EnableEvents = False ' ' Debug.Print "Target.Address:" & Target.Address ' Debug.Print "Target.Address:" & Target.AddIndent With Target If Len(Target) = 4 Then Debug.Print "Len(Target) = 4" Debug.Print "Target:" & Target Debug.Print "Len(Target):" & Len(Target) .Value = Left(Target, 2) & ":" & Right(Target, 2) ElseIf Len(Target) = 3 Then Debug.Print "Len(Target) = 3" Debug.Print "Target:" & Target Debug.Print "Len(Target):" & Len(Target) .Value = "0" & Left(Target, 1) & ":" & Right(Target, 2) ElseIf Len(Target) = 2 Then Debug.Print "Len(Target) = 2" Debug.Print "Target:" & Target Debug.Print "Len(Target):" & Len(Target) .Value = "00:" & Right(Target, 2) ElseIf Len(Target) = 1 And Target = 0 Then Debug.Print "Len(Target) = 1 And Target=0" Debug.Print "Target:" & Target Debug.Print "Len(Target):" & Len(Target) .Value = "00:00" .Select ElseIf Len(Target) = 1 Then Debug.Print "Len(Target) = 1" Debug.Print "Target:" & Target Debug.Print "Len(Target):" & Len(Target) .Value = "00:0" & Right(Target, 1) End If .NumberFormatLocal = "hh:mm" End With Application.EnableEvents = True Else ' MsgBox "入力値が不正です。" With Target .Value = "" .Select End With Exit Sub End If End Sub 'この行まで
- ベストアンサー
- Visual Basic
お礼
早速の回答をありがとうございました。 無事解決いたしました、