- ベストアンサー
エクセルVBAで If~ Then
If Range("A1") = "" Then Exit Sub と If Range("A1") = "" Then Exit Sub では違うのですか? 通常改行すると思っていたのですが、改行したらエラーになってしまいました。
- みんなの回答 (5)
- 専門家の回答
関連するQ&A
- エクセルVBAのIf ~ Thenステートメントで
予約フォームの作成に挑戦しています。 予約日が2022年8月1日の時のみ、シート4に結果を記入して行きたいのですが、 Private Sub CommandButton1_Click() If ListBox1.Text = "44774" Then Sheet4.Select Range("C2").End(xlDown).Offset(1, 0).Select ActiveCell.Value = Reservationform.ListBox2.Value ActiveCell.Offset(0, 1).Value = Reservationform.ListBox3.Value ActiveCell.Offset(0, 2).Value = Reservationform.ListBox4.Value ActiveCell.Offset(0, 2).NumberFormat = Range("C2").NumberFormat Exit Sub End If End Sub で、とりあえず成功しています。 "44774" の部分を、"Sheet6のA2"だった時のみ結果を記入するようにしたいです。 " "の中身をそのまま変えて、 If ListBox1.Text = "sheet6.Range("A2")" Then や If ListBox1.Text = "sheet6.Cells(2, 1).Value" Then に変えてみましたがうまく行きませんでした。 どのようにしたら良いでしょうか?
- ベストアンサー
- Visual Basic
- エクセルVBAについて
http://okwave.jp/qa/q7236213.html 上記質問の発展形なのですが 同様のことを E列に日付 F列に売上 G列に結果 でやりたいのですが この時A列~C列のマクロも残したままでしたいのですが 下記のように同様のプロシージャーを下段に書けばできると思ったのですが うまくいきません。 Private Sub worksheet_change(ByVal Target As Excel.Range) If Target.Address <> "$A$1" Then Exit Sub If Target = "" Then Exit Sub Range("C10:C65536").ClearContents With Range(Cells(9 + Range("A1").Value, "C"), Cells(Range("A65536").End(xlUp).Row, "C")) .FormulaR1C1 = "=MAX(RC2:R[" & -Range("A1").Value + 1 & "]C2,FALSE)" .Value = .Value End With End Sub Private Sub worksheet_change(ByVal Target As Excel.Range) If Target.Address <> "$E$1" Then Exit Sub If Target = "" Then Exit Sub Range("G10:G65536").ClearContents With Range(Cells(9 + Range("E1").Value, "G"), Cells(Range("E65536").End(xlUp).Row, "G")) .FormulaR1C1 = "=MAX(RC6:R[" & -Range("A1").Value + 1 & "]C6,FALSE)" .Value = .Value End With End Sub どなたかお知恵を拝借できませんでしょうか?
- ベストアンサー
- オフィス系ソフト
- VBAでのオートタブ?
エクセルを使って、VBEでのマクロの編集をしています。 その際に、改行した時のオートタブ出来ずに困っています。(正式名称が分かりません) C++でプログラムを書くと、このように ifの範囲では分かりやすくオートタブしてくれるのに If Range("B4") = "" Then Exit Sub End If Else エクセルのエディターで同じ文章を書くと If Range("B4") = "" Then Exit Sub End If Else となってしまい、非常に読みづらいです。 どのように設定すればオートタブ?してくれるのでしょうか? どなたか教えてください・・・。
- ベストアンサー
- その他MS Office製品
- エクセル VBAについて。
Private Sub ComboBox2_Change() On Error Resume Next With Me.ComboBox2 If .ListCount < 0 Then Exit Sub If .Value = "" Then Exit Sub Me.Range("K45").Value = _ Worksheets("マスタ").Range(.List(.ListIndex, 1)).Offset(0, 2).Value Me.Range("K48").Value = _ Worksheets("マスタ").Range(.List(.ListIndex, 1)).Offset(0, 4).Value End With End Sub これをマスタのU列とW列を表示したい場合、どこを変えれば良いのでしょうか? 今はD列とF列が表示されております。
- ベストアンサー
- Excel(エクセル)
- エクセル2003のVBAについて
次のコードのように、初めにクリックしたセルに、次にクリックしたセルの内容をコピーするVBAを書いたのですが、コピー先の列を、複数指定する方法がわかりません。 たとえば、C~O列(3~15)のように指定できればと思っています。 このようなことは可能でしょうか? ご教授いただけます方、よろしくお願い申し上げます。 -------------------------------------------------- Dim FrstCell As Range Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.MergeCells = False And Target.Count > 2 Then Exit Sub On Error Resume Next '想定しないエラーを無視 If Target.Cells(1) = "" Then If Target.Column <> 3 Then Exit Sub 'C列 コピー先 Set FrstCell = Target.Cells(1) Else If Target.Column <> 18 Then Exit Sub 'R列 コピー元 Target.Copy FrstCell.MergeArea End If On Error GoTo 0 'エラートラップ終了 End Sub
- ベストアンサー
- その他MS Office製品
- エクセル VBAマクロ if文 はどうすれば?
先ほど質問したのですが、さらにわからなくなったのでお願いします 先ほどの質問 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ http://okwave.jp/qa/q7236338.html >変数と式の両立は難しいでしょうからどうすればよいのでしょう? ⇒関数では出来無いのはエクセルの常識ですのでマクロ(VBA)組込みになります。 一例です。 対象シートタブ上で右クリック→コードの表示→以下のコード貼り付けてA1に枚数を入力して お試しください。 サンプルコード Private Sub Worksheet_Change(ByVal Target As Range) 単価 = 5 If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub If IsNumeric(Target.Value) And Target.Value > 0 Then Application.EnableEvents = False Target.Value = Target.Value * 単価 Application.EnableEvents = True End If End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ↓変更&応用したのですが、、、、 EX:(セル) セル番号 用紙種類1~3 用紙種類 C12 A3モノクロ1 D12 A3カラー1 C13 A3モノクロ2 D13 A3カラー2 C14 A3モノクロ3 D14 A3カラー3 ※金額の違いは、モノクロとカラーの値段が違うだけ 1~3は金額的な違いはない とあった場合、 ためしに先ほどのを応用して用いたのですが 変更点は、用紙サイズ、カラーの有無による金額 出力先セルの番号 Private Sub Worksheet_Change(ByVal Target As Range) を Private Sub A4_mono_1(ByVal Target As Range) Private Sub A4_mono_2(ByVal Target As Range) ・ ・ ・ と変更したのですがうまく動作しなかったのですが、 どういった点が悪かったのでしょうか? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 最終的な質問↓ 上記のものはVBAマクロ文は基本1つのみなので、if文で作らなくてはいけないということが分かったのですが、そこでさらに疑問が浮かびました、 Private Sub Worksheet_Change(ByVal Target As Range) If or(target.columns = C12:C14) Then 単価1 = 7.6 If Intersect(Target, Range("C12:C14")) Is Nothing Then Exit Sub If IsNumeric(Target.Value) And Target.Value > 0 Then Application.EnableEvents = False Target.Value = Target.Value * 単価1 Application.EnableEvents = True単価1 = 7.6 elseif or(target.columns = D12:D14) Then 単価2 = 30.6 If Intersect(Target, Range("D12:D14")) Is Nothing Then Exit Sub If IsNumeric(Target.Value) And Target.Value > 0 Then Application.EnableEvents = False Target.Value = Target.Value * 単価2 Application.EnableEvents = True End If End Sub としたっ場合全く式になっていません どのようにすればよいのでしょう?
- ベストアンサー
- オフィス系ソフト
- エクセルVBAについて
エクセルVBAについて 下にある、1行目に入力された数値の、選択したセルの数値を、B5セルに表示させるマクロなのですが、1行目が結合していると、うまくB5セルに表示できません。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub '●複数セル選択は無視 If Target.Row <> 1 Then Exit Sub '●1行目以外の選択は無視 If Target.Column > 6 Then Exit Sub '●F列目以降の選択は無視 If Target.Value = "" Then Exit Sub '●選択セルが未入力なら無視 Range("B5").Value = Target.Value End Sub このマクロで、結合しているセルをB5に表示させることはできますでしょうか? 1行目で選択するセルは、すべて2つのセルが結合しています。 よろしくお願いいたします。
- ベストアンサー
- その他MS Office製品
- 印刷後のVBAの実行 (3)
Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name = "Sheet1" Then If Range("D6").Value = "" Then Cancel = True MsgBox ("名前を入力してください") Range("D6").Select Exit Sub End If Else If ActiveSheet.Name = "Sheet2" Then If Range("C11").Value = "" Then Cancel = True MsgBox ("受付時間を入力してください") Range("C11").Select Exit Sub End If Else Exit Sub End If End If If Worksheets("Sheet1").Range("D5") = "不要" Then GoTo P1 ActiveSheet.Range("A70:Y70").Copy If Worksheets("Sheet3").Range("A1").Value = "" Then Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues Else Worksheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _ Paste:=xlPasteValues End If Application.CutCopyMode = False P1: ActiveSheet.Range("A1").Select End Sub sheet1のD5に「不要」と入っていたら 24~33行目の作業がキャンセルになりますが sheet2のD5にも「不要」と入っていたら、同じ様にキャンセルできる様に出来ますでしょうか? ご回答お願いします
- 締切済み
- オフィス系ソフト
- エクセル2010のvbaについて
Sheet1に挿入したイメージ(ActiveX)をクリックすると数字が上がって 実行中にもう一度同じイメージをクリックすると止まるようにしたいのですが 数字が上がったまま止まりません(上限はあるのでオーバーフローはしません) Worksheet_SelectionChangeで(ActiveXのイメージがもう一回押されて) 選択セルが変わったら停止としたかったのですが反応しません イメージをクリック(実行)してもう一回押すとクリックしている間は止まりますが離すと再開されます コードにクリックされた回数がわかるようにしましたが増えません 説明が分かりにくかったら追記します 回答お願いします クラスモジュールのコード(イメージの名前によって少し処理を変えるためです) Private Sub myImg_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim i As Integer, a, b, C As POINTAPI, obj As OLEObject i = myImg.Index - 1 Call GetCursorPos(C) Set obj = ActiveWindow.RangeFromPoint(C.X, C.Y) b = Range("A1") Range("A1") = obj.Name Range("A2") = Range("A2") + 1 'クリックされた回数が分かるようにするため追加 If Range("A2") = 2 Then Range("C1").Select End If Range("A3") = "B1" If obj.Name = 2 Then Range("A3") = "B3" Range(Range("A3")).Select End Sub Sheet1のコード Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Target.Address <> Range(Range("A3")).Address Then Exit Sub Do While ActiveCell < Range("A4") * 100 If ActiveCell.Address <> Range(Range("A3")).Address Then Exit Do End If DoEvents ActiveCell = ActiveCell + 1 Loop End Sub
- ベストアンサー
- その他MS Office製品
- エクセル・マクロでIf Thenの使い方
このような質問は、ルール(エチケット、マナー)違反になるでしょうか? もしそうならお許し下さい。 名前ボックスに表示される名前を、マクロで非表示にし、元に戻す、という操作を次の二つのボタンで実行するように作りました。エクセル2003です。 Private Sub CommandButton1_Click() Dim tname As Name For Each tname In ThisWorkbook.Names tname.Visible = False Next End Sub Private Sub CommandButton2_Click() Dim tname As Name For Each tname In ThisWorkbook.Names tname.Visible = True Next End Sub これを一つのボタンで、If Then Elseを使い実行できるようにしたいのですが If ・・・ Then の間の書き方が分からずうまくいきません。 If Names.Visible = False Then If ThisWorkbook.Names.Visible = False Then If ThisWorkbook.tname.Visible = False Then Private Sub CommandButton3_Click() Dim tname As Name If Names.Visible = False Then 'これでは駄目 For Each tname In ThisWorkbook.Names tname.Visible = False Next Else For Each tname In ThisWorkbook.Names tname.Visible = True Next End If End Sub 苦し紛れにこんなことをやってごまかそうとしているのですがこれって邪道ですしかっこうわるいですよね。 Private Sub CommandButton3_Click() Dim tname As Name If Range("g1").Value = " " Then For Each tname In ThisWorkbook.Names tname.Visible = False Next Range("g1").Value = "1" Else For Each tname In ThisWorkbook.Names tname.Visible = True Next Range("g1").Value = " " End If End Sub ど素人ですがよろしくご教導ください。
- ベストアンサー
- オフィス系ソフト
- MFC-J1605DNに以前使用していた複合機MFC-J855DWNの子機(BCL-D100)が増設できない理由を解説します。
- 質問者はMFC-J1605DNに附属の子機は設定し使用できているが、以前使用していた子機は増設できないと述べています。
- 「増設コードレス子機取扱説明書」の操作を試しても「増設できませんでした。充電されていないか、型番が違う可能性があります」というメッセージが表示されます。
お礼
くわしく解説していただきありがとうございます。 勉強になりました。