[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『「×」だったら「空白」「空白」だったら「×」』(サツキ)
まったくの初心者です。
G22が「×」だったらG23は「空白」になる。
そして
G22が「空白」だったらG23は「×」になる。
もしくは
G23が「×」だったらG22は「空白」になる。
また
G46が「×」だったらG47は「空白」になる。
そして
G46が「空白」だったらG47は「×」になる。
もしくは
G47が「×」だったらG46は「空白」になる。
また
G77が「×」だったらG78は「空白」になる。
そして
G77が「空白」だったらG78は「×」になる。
もしくは
G78が「×」だったらG77は「空白」になる。
以上のようになるマクロができないでしょうか。
宜しくお願いします。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
3ペアそれぞれが上下という同じ関係になってますから、とりあえず
G22、G23で考えてみるとよいとおもいます。
(もこな2 ) 2020/05/01(金) 14:41
マクロは記録程度の知識ないのですが
記録をやってみたのですが
動かないです。
Sub Macro1()
'
' Macro1 Macro
'
'
Range("G22").Select ActiveCell.FormulaR1C1 = "×" Range("G23").Select ActiveCell.FormulaR1C1 = "" Range("G23").Select ActiveCell.FormulaR1C1 = "×" Range("G22").Select ActiveCell.FormulaR1C1 = "" Range("G23").Select End Sub
これでは
だめですよね。
よろしくお願いいたします。
(サツキ) 2020/05/01(金) 14:54
Sub 実験1() Stop 'ブレークポイントの代わり
Select Case Range("G22").Value Case Is = "×" Range("G23").Value = ""
Case Is = "" Range("G23").Value = "×" End Select
If Range("G23").Value = "×" Then Range("G22").Value = "" End If
End Sub
※ステップ実行がわからない場合は↓を参照 https://www.239-programing.com/excel-vba/basic/basic023.html http://plus1excel.web.fc2.com/learning/l301/t405.html https://screwandsilver.com/stepwise_execution_in_vba/
次にわからない命令等があれば(というか最初はどれもわからないかもですが。。。)ネット検索です。
■IFってなんだろう
https://office-hack.com/excel/if-vba/
https://www.sejuku.net/blog/30059
https://www.forguncy.com/blog/20180918_vbaif
■Select Caseってなんだろう
https://www.sejuku.net/blog/30642
http://officetanaka.net/excel/vba/statement/SelectCase.htm
https://valmore.work/excel-vba-case/
■Valueってなんだろう
http://kabu-macro.com/vba_apply/vba_value.html
http://officetanaka.net/excel/vba/beginner/08.htm
まずはここまでやってみてください。
(もこな2 ) 2020/05/01(金) 15:13
Sub AAA()
If Range("G22") = "×" Then Range("G23").Value = "" ElseIf Range("G22") = "" Then Range("G23").Value = "×" End If If Range("G46") = "×" Then Range("G47").Value = "" ElseIf Range("G46") = "" Then Range("G47").Value = "×" End If If Range("G77") = "×" Then Range("G78").Value = "" ElseIf Range("G77") = "" Then Range("G78").Value = "×" End If End Sub (あつ) 2020/05/01(金) 15:17
コピペしてみたのですが
動かないのです。
なぜでしょうか。
宜しくお願いいたします。
(サツキ) 2020/05/03(日) 14:59
私が「2020/05/01(金) 15:13」に提示したものであれば、提示したようにステップ実行してみて、どの部分が想定と違う動きになっているか教えてください。
あつさんが提示されているコードは、G23などの方は処理されないのが正常ですね。
(なにも書いてないから)
なお、入力したら【自動的】にマクロが発動するようにするには、もう一工夫必要です。
(もこな2 ) 2020/05/03(日) 15:12
宜しくお願い致します。
(サツキ) 2020/05/04(月) 12:29
↓の部分は対応されています。
G22が「×」だったらG23は「空白」になる。 そして G22が「空白」だったらG23は「×」になる。
↓の部分が抜けてます
G23が「×」だったらG22は「空白」になる。
と言っています。
>宜しくお願い致します。
なにを?
既に実験用のコードを提示して、ステップ実行するように言ってますが、それに関するお返事は無いようですが・・
(もこな2 ) 2020/05/04(月) 12:56
| G22が「×」だったらG23は「空白」になる。
| そして
| G22が「空白」だったらG23は「×」になる。
| もしくは
| G23が「×」だったらG22は「空白」になる。
G22、G23がそれぞれどんな値の時に、処理後はどうしたいのかを
ケースを尽くして例示すれば、正確なものになると思います。
(γ) 2020/05/04(月) 13:49
このようにしたいのですが。
?@
G22「犬」
G23「猫」
?AG22に「×」を入れたら
G22「×」
G23「空白」
?BG23に「×」を入れたら
G22「空白」
G23「×」
宜しくお願い致します。
(サツキ) 2020/05/05(火) 21:50
どうも、ステップ実行をする気はなさそうですし、質問じゃなくて作業依頼のような気がしてきましたが、一応↓のような順番で説明していくつもりでした。
(1)条件分岐の方法 ← 2020/05/01(金) 15:13 のコメント
(2)Offsetを使って、ターゲットの1行下のセルを指定する方法
(3)For Each 〜 Next を使って、特定のセルを巡回する方法
(4)「イベント」という方法を使ってセルの値が変わったら、自動的にマクロが発動するようにする方法
よって、"質問"だったならまずは、(1)をやってみてください。
なお、質問ではなくて、作成依頼であればそのように言っていただいたほうがお互いの利益になるとおもいます。
(作業依頼の場合は私は撤退しますので、質問者さんにとっては余計な説明されなくて済みますし、私も求められていない説明をしないで済みます)
(もこな2) 2020/05/06(水) 00:25
リンク等を見たのですが私の頭では理解ができません。
できれば
コードを組んでいただけないでしょうか。
宜しくお願い致します。
(サツキ) 2020/05/06(水) 12:30
(もこな2) 2020/05/06(水) 13:01
もこな2さん、あつさんのコードについてはそれなりに動作します。
貴方の操作が間違っています。再度確認してみてはどうか。
>リンク等を見たのですが私の頭では理解ができません。
>できれば
>コードを組んでいただけないでしょうか。
多少でも理解できなければコード化はあきらめるべし。
(り) 2020/05/06(水) 20:09
(サツキ) 2020/05/07(木) 08:54
お力をお願いいたします。
Sub auto_open()
If Range("G22") = "×" Then Range("G23").Value = "" ElseIf Range("G22") = "" Then Range("G23").Value = "×" End If If Range("G46") = "×" Then Range("G47").Value = "" ElseIf Range("G46") = "" Then Range("G47").Value = "×" End If If Range("G77") = "×" Then Range("G78").Value = "" ElseIf Range("G77") = "" Then Range("G78").Value = "×" End If End Sub
(サツキ) 2020/05/07(木) 10:09
>このように組んでみましたがダメです。
それは組んだといわず、考えもせずコピペしてタイトル変えただけでしょう。
そして、↓はどうでもよくなったのでしょうか?
G23が「×」だったらG22は「空白」になる。 G47が「×」だったらG46は「空白」になる。 G47が「×」だったらG46は「空白」になる。
>自動的に動かすにはどのようにしたらよいのでしようか。
既に言ったけど、イベントという方法を使います。
(たぶん今回は、【ワークシート】の【Changeイベント】を使えば解決します) https://tonari-it.com/excel-vba-event-worksheet-change/
(もこな2 ) 2020/05/07(木) 10:22
>自動的に動かすには どのようにしたらよいのでしようか。
以下のコードをシートモジュールに貼り付けてお試しください。
Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range On Error GoTo ErrorHandler For Each c In Target If Not Intersect(c, Range("G22:G23,G46:G47,G77:G78")) Is Nothing Then Application.EnableEvents = False Select Case c.Address(0, 0) Case "G22": c.Offset(1).Value = IIf(c.Value = "×", "", "×") Case "G23": c.Offset(-1).Value = IIf(c.Value = "×", "", "×") Case "G46": c.Offset(1).Value = IIf(c.Value = "×", "", "×") Case "G47": c.Offset(-1).Value = IIf(c.Value = "×", "", "×") Case "G77": c.Offset(1).Value = IIf(c.Value = "×", "", "×") Case "G78": c.Offset(-1).Value = IIf(c.Value = "×", "", "×") End Select Application.EnableEvents = True End If Next Exit Sub ErrorHandler: Application.EnableEvents = True End Sub
(ピンク) 2020/05/07(木) 10:34
こちらの方が見やすいかな
Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range On Error GoTo ErrorHandler For Each c In Target If Not Intersect(c, Range("G22:G23,G46:G47,G77:G78")) Is Nothing Then Application.EnableEvents = False Select Case c.Address(0, 0) Case "G22": Range("G23").Value = IIf(c.Value = "×", "", "×") Case "G23": Range("G22").Value = IIf(c.Value = "×", "", "×") Case "G46": Range("G47").Value = IIf(c.Value = "×", "", "×") Case "G47": Range("G46").Value = IIf(c.Value = "×", "", "×") Case "G77": Range("G78").Value = IIf(c.Value = "×", "", "×") Case "G78": Range("G77").Value = IIf(c.Value = "×", "", "×") End Select Application.EnableEvents = True End If Next Exit Sub ErrorHandler: Application.EnableEvents = True End Sub (ピンク) 2020/05/07(木) 10:41
動くのですが
G23を空白にしたとき
G22に×表示させたいのですが
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("G22") = "×" Then Range("G23").Value = "" ElseIf Range("G22") = "" Then Range("G23").Value = "×" End If If Range("G46") = "×" Then Range("G47").Value = "" ElseIf Range("G46") = "" Then Range("G47").Value = "×" End If If Range("G77") = "×" Then Range("G78").Value = "" ElseIf Range("G77") = "" Then Range("G78").Value = "×" End If End Sub
と思ったところ
ピンク様のコードで思うように動きました。
ピンク様ありがとうございました。
( サツキ) 2020/05/07(木) 11:05
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.