• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:列の数を求めるには)

列の数を求めるには

このQ&Aのポイント
  • Private Sub Worksheet_Change(ByVal Target As Range)内のマクロでRightEndという変数を宣言し、シートの右端がTであることを示しています。
  • 値が変化した列の隣の列からRightEndまでの列の数を求めるにはどうしたらいいでしょうか?
  • 求められた列の数に基づいて、.Offset(, 1).Resize(, 列の数).ClearContentsに代入することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

続けてお邪魔します。 >LeftEndの右隣の列から(この場合C列から)RightEndまでをClearContentsしたいときは・・・ LeftEnd と RightEnd は文字列型として宣言しているのですよね? 文字列の四則計算はできませんので、 一番簡単なのは文字列をセルの列番号として一旦置き換え、その差を求める方法だと思います。 今回の質問の場合、 LeftEnd が「E」、RightEnd が「B」とした場合、5-2で「3」を求めたいとなれば Range(RightEnd & 1).Column - Range(LeftEnd & 1).Column または Cells(1, RightEnd).Column - Cells(1, LeftEnd).Column のようにしてみてはどうでしょうか? (セルの行番号はいくつでも構いません)m(_ _)m

maamaa
質問者

お礼

なんどもお世話になってすみません 確かに指摘の通りです 分かりました やって見ます ありがとうございました 何度もお世話になって申し訳ありません

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です。 はぁ~~!そういうコトだったのですね! 色々やり方はあると思いますが、 Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range, myRng As Range Dim Rightend As String Rightend = "T" Set myRng = Range(Rightend & ":" & Rightend) With Target If .Count = 1 Then If .Column < myRng.Column Then .Offset(, 1).Resize(, myRng.Column - .Column).ClearContents End If End If End With End Sub こんな感じではどうでしょうか?m(_ _)m

maamaa
質問者

補足

tom04さん お世話になっております 私の説明ミスでお手数おかけしています 現在、マクロが70行を超えてしまっています そこに、教えてもらった内容で組み込もうとしますが、狙った動きになりません そこで、もっと単純にするために .Offset(, 1).Resize(, ????).ClearContents で RightEnd="E" ClearContentsする右端の列はE LeftEnd="B" ClearContentsする基準の列はB としたとき LeftEndの右隣の列から(この場合C列から)RightEndまでをClearContentsしたいときは .Offset(, 1).Resize(, ????).ClearContents の????部分は3ですが  ????はどういう式で書けばよいでしょうか?  

すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんにちは! 同じ行に「T」は複数存在しない!という前提です。 メッセージボックスに表示させています。 Private Sub Worksheet_Change(ByVal Target As Range) Dim RightEnd As String Dim c As Range RightEnd = "T" With Target If .Count = 1 Then Set c = Rows(.Row).Find(what:=RightEnd, LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then If c.Column > .Column Then MsgBox c.Column - .Column End If End If End If End With End Sub こんな感じでは同でしょうか?m(_ _)m

maamaa
質問者

補足

tom04さん、おはようございます いつもお世話になっています 私の説明が間違っていました。深くお詫び申し上げます tom04さんの貴重な時間を無駄にしてしまいました Tはセルの値ではなく、T列のTです 完全に私の説明不足です 質問を変えさせてください 仮に、列Bから列E迄なら、列の数は4です 列Bの右隣の列から(C列から)E列迄をClearContentsしようとすれば .Offset(, 1).Resize(, 3).ClearContentsですが RightEnd="E"とした場合("E"はE列のEです シート右端の最終列はE列という意味でRightEndです) .Offset(, 1).Resize(, 3).ClearContentsの3の部分を変数で表現するには マクロをどう書いたら良いでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A