戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ

■ 24時間以内に投稿された新着記事 10件です。



    [196179] Re[12]: 2つのセルに入力して反映
    ■■
    □投稿者/ 半平太 -(2024/04/26(08:23))
    □U R L/

      微妙にコードが違うような気がします。
      
      以下のコードで全体を上書きして、トライしてみてください。
      
      Private Sub Worksheet_Change(ByVal Target As Range)
          Dim strAry(0 To 1)
          Dim Pos
          
          strAry(0) = Split("T7,X7,AB7,AF7,AJ7,AN7,AR7,AV7,AB9,AF9,AJ9,AN9,AR9,AV9,AJ11,AN11,AR11,AV11,AR13,AV13", ",")
          strAry(1) = Split("T24,X24,AZ24,BD24,AZ30,BD30,T28,X28,T30,X30,AZ26,BD26,AZ32,BD32,T26,X26,AZ28,BD28,T32,X32", ",")
          
          Pos = Application.Match(Target.Address(0, 0), strAry(0), 0)
              
          If IsNumeric(Pos) Then
              Pos = Pos * 10 + 1 '1桁目は1。strAry(1)が転記先
          Else
              Pos = Application.Match(Target.Address(0, 0), strAry(1), 0)
              If IsError(Pos) Then
                  Exit Sub
              Else
                  Pos = Pos * 10 '1桁目は0。strAry(0)が転記先
              End If
          End If
          
          Application.EnableEvents = False
              Range(strAry(Pos Mod 10)(Pos \ 10 - 1)) = Target.Value
          Application.EnableEvents = True
      End Sub
      
      上のコードで正常動作することを確認してください。
      
      その後、そちら独自の変更(もしあれば)を施すと旨く行かなくなるなら、
      どう変更したのか教えてください。


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [196180] Re[13]: 2つのセルに入力して反映
    ■■
    □投稿者/ 匿名 -(2024/04/26(08:40))
    □U R L/

      Exit Subにとび、メッセージ表示されません。
      
      コードの先頭に
      
          MsgBox Target.Address(0, 0)
      
      としてみたら原因が判明するかも。


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [196181] Re[13]: 2つのセルに入力して反映
    ■■
    □投稿者/ むみ -(2024/04/26(09:25))
    □U R L/

      半平太さま
      196179のソースに書き換えました
      
      数値の時は対のセルに値が変更されますが(OK)
      
      空白にした場合は
      
      Pos = Application.Match(Target.Address(0, 0), strAry(0), 0)
      で、エラー2042となり
       Exit Sub
      となり、そのセルだけ空白で対のセルには数値が残ったままになります。
      
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [196182] Re[14]: 2つのセルに入力して反映
    ■■
    □投稿者/ 半平太 -(2024/04/26(09:54))
    □U R L/

      If IsError(Pos) Then
                  MsgBox Target.Address(0, 0) 'ここに一文挿入して,"T7"と出るか確認してください。
      Exit Sub


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [196183] Re[15]: 2つのセルに入力して反映
    ■■
    □投稿者/ むみ -(2024/04/26(11:20))
    □U R L/


      2セル結合してますので、
      T7:U8

      と表示されました!!



    [196184] Re[16]: 2つのセルに入力して反映
    ■■
    □投稿者/ 半平太 -(2024/04/26(12:05))
    □U R L/

      なるほどです。
      私も知らなかったです。ありがとうございます。
      ※結合セルだと、値入力では単セル、クリア操作では複数セルが返っていますね。
      
      なら、冒頭で強制的にワンセルにする案↓
      
      Dim Pos
          Set Target = Target.Cells(1, 1) ’ここで左上の1セルに限定する
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [196185] Re[17]: 2つのセルに入力して反映
    ■■
    □投稿者/ むみ -(2024/04/26(13:17))
    □U R L/


      おぉ!!!!素晴らしい!!!

      出来ました!!!!クリアになりました。


      こんなに丁寧にお世話になってなんですが、、
      この一文の意味が理解できません

      Range(strAry(Pos Mod 10)(Pos \ 10 - 1)) = Target.Value

      配列を10で割る?¥マークで 10-1・・


      もし、よろしければ引き続きご教授願えれば・・図々しくすみません






    [196186] Re[18]: 2つのセルに入力して反映
    ■■
    □投稿者/ 半平太 -(2024/04/26(14:29))
    □U R L/

      >Range(strAry(Pos Mod 10)(Pos \ 10 - 1)) = Target.Value
      >この一文の意味が理解できません
      確かに分かりにくいですよねー。
      
      意図するところは簡単で、
      (1)変更したセルは  strAry(0)内のアドレスなのか strAry(1)内なのか。 
      (2)配列の何番目に在ったのか。
      それが分かれば、自動変更が可能である、と言う事になります。
      
      さて
      Pos = Application.Match(Target.Address(0, 0), strAry(0), 0)
      Pos = Application.Match(Target.Address(0, 0), strAry(1), 0)
      
      上記2つのステートメントにより、何番目かが判明し、
      どっちの配列に在ったのかは strAry(0)か strAry(1)の違いで分かる。
      
      そこで
      strAry(0)内に在った場合、Posを10倍して、1を足す
       Pos = Pos * 10 + 1 '1桁目は1。strAry(1)が転記先
      
      strAry(1)内に在った場合は、Posを10倍して、何も足さない。
       Pos = Pos * 10 '1桁目は0。strAry(0)が転記先
      
      そんな加工をPosに施しておくと
       (Pos Mod 10)  → Posを10で割った余りが、自動変更すべき相手方の配列番号を示し、
       (Pos \ 10 - 1) → Posを10で割った商が、配列内の添え字になる
                            (ただし、配列の添え字は0スタートなので、1を差し引く)
      
      以上で必要な数値が揃ったので
      自動変更すべきセルを特定して、Targetの値を代入する。
      
      Range(strAry(相手方の配列番号)(配列内添え字)) = Target.Value
      
      例えば、T7に変更があれば
       Range(strAry(1) (1-1)) = Target.Value




    [196187] Re[19]: 2つのセルに入力して反映
    ■1■
    □投稿者/ むみ -(2024/04/26(15:11))
    □U R L/


      半平太さま

      大変詳しくわかりやすく 本当にありがとうございました!!

      ド素人にここまで丁寧にお付き合い頂き感謝しかありません。

      また疑問が沸くかもですが、、、(^0^;)

      ありがとうございました!!



- Child Forum -
Edit:ゆう-G