• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:特定範囲のセルの最終文字1文字を削除)

特定範囲のセルの最終文字1文字を削除

このQ&Aのポイント
  • VBAを使用して、特定範囲のセルの最終文字を削除する方法を教えてください。
  • セルの値が空でない場合にのみ、最終文字を削除するように設定してください。
  • エラーが表示される場合は、For Eachループの構文を修正してください。

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

  • ベストアンサー
  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.2

よく見たら Rangeオブジェクトの代入の仕方もおかしいです。 というより選択した範囲の中のセルを指定しているはずなのに 範囲 を変数に入れようとしているのは意味不明ですね。 Private Sub CommandButton1_Click() Dim r As Range For Each r In Worksheets("Sheet1").Range("J26:J56") If Len(r.Value) > 0 Then r.Value = Left(r.Value, Len(r.Value) - 1) End If Next End Sub

1211M
質問者

お礼

Chiquilin様 早いご回答ありがとうございます。 完璧に思い通りにできました。 感謝します。 今後もよろしくお願いします。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

質問者のエラー原因は、既回答でご指摘の通りで、お粗末。 参考 下記のような、他の方法も勉強したら。 エクセル関数でできる課題だし。 J29:J30に文字列があるとして、右隣セルに結果を出す場合 標準モジュールに Sub test01() Sheets("Sheet1").Range("K25:K30").Formula = "=LEFT(J25,LEN(J25)-1)" End Sub 実行して、結果 J列  K列 werty wert erty ert d123ll d123l pseadq psead 112あ 112 345tyu1 345tyu たった1行です これを選択(対象)としている、セル範囲の列数分だけ繰り返す。

回答No.3

ちょっとした英語の問題ですかねぇ。 「For Each 〇〇 in △△」 ですから、「△△の中のそれぞれの〇〇」ですね。 > Sheet1のJ26からJ56の、セル について処理をしたいわけですから、解釈的には   For Each セル In Sheet1のJ26からJ56 です。 > r = Worksheets("Sheet1").Range("J26:J56") と代入しているので、簡略して   For Each セル In r と書けますね。 そんなわけで、 Private Sub CommandButton1_Click() Dim r As Range, sh As Range   ' Range型の変数に代入するときはSetを使いますよ。   Set r = Worksheets("Sheet1").Range("J26:J56")   For Each sh In r     If Len(sh.Value) > 0 Then       sh.Value = Left(sh.Value, Len(sh.Value) - 1)     End If   Next End Sub と書けばうまくいくのではないかな、と思いますよ。 ご提示のコードを最大限活かそうと思ったら、 Private Sub CommandButton1_Click() Dim r As Range   Worksheets("Sheet1").Range("J26:J56").Select   For Each r In Selection     If Len(r.Value) > 0 Then       r.Value = Left(r.Value, Len(r.Value) - 1)     End If   Next End Sub こんな感じで、代入しないで 先に「Select」してやると良いかもしれません。

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.1

「End Sub」の後に「Next」がくるのはどう考えてもおかしいでしょう。 「Sub~End Sub」の中に「For ~Next」を入れて下さい。

1211M
質問者

補足

Chiquilin 様 早速の回答ありがとうございます。 「Sub~End Sub」の中に「For ~Next」を入れて下さい。 この入れ方?がわかりません。 Private Sub CommandButton1_Click() Dim r As Range r = Worksheets("Sheet1").Range("J26:J56") For Each r In Application.Selection If Len(r.Value) > 0 Then r.Value = Left(r.Value, Len(r.Value) - 1) End If Next End Sub