[[20200501143023]] 『「×」だったら「空白」「空白」だったら「×」』(サツキ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『「×」だったら「空白」「空白」だったら「×」』(サツキ)

まったくの初心者です。

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


もこな2様
お返事ありがとうございます。
できるのですね。

マクロは記録程度の知識ないのですが

記録をやってみたのですが
動かないです。

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


もこな2様
あつ様
お返事ありがとうございます。

コピペしてみたのですが
動かないのです。
なぜでしょうか。
宜しくお願いいたします。
(サツキ) 2020/05/03(日) 14:59


>コピペしてみたのですが動かないのです。
どのコードなのでしょうか?

私が「2020/05/01(金) 15:13」に提示したものであれば、提示したようにステップ実行してみて、どの部分が想定と違う動きになっているか教えてください。

あつさんが提示されているコードは、G23などの方は処理されないのが正常ですね。
(なにも書いてないから)

なお、入力したら【自動的】にマクロが発動するようにするには、もう一工夫必要です。

(もこな2 ) 2020/05/03(日) 15:12


もこな2様
お返事ありがとうございます。
あつさんのコードは
動かなくてあたりまえなのでしょうか。

宜しくお願い致します。
(サツキ) 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


もこな2様
γ様
お返事ありがとうございます。

このようにしたいのですが。

?@
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


もこな2様
お返事ありがとうございます。

リンク等を見たのですが私の頭では理解ができません。

できれば
コードを組んでいただけないでしょうか。

宜しくお願い致します。
(サツキ) 2020/05/06(水) 12:30


わかりました。作成依頼だったようなので、私は撤退します。
別の回答者さんをお待ちください。

(もこな2) 2020/05/06(水) 13:01


回答者のみなさん
宜しくお願い致します。
(サツキ) 2020/05/06(水) 19:51

>コピペしてみたのですが動かないのです。

もこな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

もこな2様
お返事ありがとうございます。
感謝しております。

動くのですが
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.