Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12517 / 13646 ツリー ←次へ | 前へ→

【10101】セル内の文字列のうち最後の1文字だけ削除したい さとさと 04/1/7(水) 18:30 質問
【10105】Re:セル内の文字列のうち最後の1文字だけ削... つん 04/1/7(水) 19:16 回答
【10114】Re:セル内の文字列のうち最後の1文字だけ削... さとさと 04/1/8(木) 9:03 質問
【10115】Re:セル内の文字列のうち最後の1文字だけ... つん 04/1/8(木) 9:20 回答
【10116】Re:セル内の文字列のうち最後の1文字だけ... さとさと 04/1/8(木) 9:47 お礼
【10118】Re:セル内の文字列のうち最後の1文字だけ... Jaka 04/1/8(木) 10:48 発言
【10120】むむむ? つん 04/1/8(木) 11:03 質問
【10122】ごめんなさい。わすれてた。 Jaka 04/1/8(木) 11:20 回答
【10124】あ、なるほど つん 04/1/8(木) 11:37 お礼

【10101】セル内の文字列のうち最後の1文字だけ削...
質問  さとさと  - 04/1/7(水) 18:30 -

引用なし
パスワード
   はじめまして。まだVBAの本を読み始めたばかりのど素人です。
会社で数千行もあるデータの修正を命じられました。
ある製品型番の最後の1文字だけを削除する必要があります。
過去の投稿を探してみましたが、よくわかりません。
どなたかご存知の方いらっしゃらないでしょうか?
(もしすごく簡単だったら、ごめんなさい。)

【10105】Re:セル内の文字列のうち最後の1文字だけ...
回答  つん E-MAIL  - 04/1/7(水) 19:16 -

引用なし
パスワード
   さとさと さん、こんばんは

>会社で数千行もあるデータの修正を命じられました。
>ある製品型番の最後の1文字だけを削除する必要があります。

こんな感じではどうでしょうか?
A列にデータがあるとして、

Sub test()

  Dim i As Long
  
  For i = 1 To Range("a65536").End(xlUp).Row
    With Cells(i, 1)
      .Value = Left(.Value, Len(.Value) - 1)
    End With
  Next i
  

End Sub

一度お試しください。
あ、勿論、データはバックアップとってしてくださいね。

【10114】Re:セル内の文字列のうち最後の1文字だけ...
質問  さとさと  - 04/1/8(木) 9:03 -

引用なし
パスワード
   つん さん、ありがとうございます。

さっそくテストしてみました。
見事に削除できました。昨日2時間かけて500行くらいだったのに。
VBAの力に感動しました。本当にありがとうございます。

もし、よろしければプログラム内の件で教えて欲しいのですが、

>  For i = 1 To Range("a65536").End(xlUp).Row

この行が、削除行の数を表してると思うのですが、
例えば10行だけ削除したいと思ったら、"a65536"を
どう変えたらよいのでしょうか?

不勉強で申し訳ございません。
どうかよろしくお願い致します。

【10115】Re:セル内の文字列のうち最後の1文字だけ...
回答  つん E-MAIL  - 04/1/8(木) 9:20 -

引用なし
パスワード
   さとさと さん、おはようございます。

>見事に削除できました。昨日2時間かけて500行くらいだったのに。
>VBAの力に感動しました。本当にありがとうございます。
(^o^)

>>  For i = 1 To Range("a65536").End(xlUp).Row
>
>この行が、削除行の数を表してると思うのですが、
>例えば10行だけ削除したいと思ったら、"a65536"を
>どう変えたらよいのでしょうか?

えっとこれは、変数iに、処理するセルの行番号を代入しています。
(それはわかる?)

Range("a65536").End(xlUp)

この部分は、A列の最終のセルがセレクトされている状態で、
「Ctrl+↑キー」を押した時に示されるセルを示しています。
(表現下手ですみません)
で、

Range("a65536").End(xlUp).Row

で、そのセルの行番号が取得できます。
なので、A列の500行目までデータが入ってたとしたら、「500」が取得されます。
前置きが長くなりましたが、そういうことですので、
前もって「10行目」までとわかってる場合は、

For i = 1 To 10

でOKです。
ちなみに、10行目から、50行目までとかなら、

For i = 10 to 50 とか・・・・

わ・・・わかるかしらん?(^^;

【10116】Re:セル内の文字列のうち最後の1文字だけ...
お礼  さとさと  - 04/1/8(木) 9:47 -

引用なし
パスワード
   つん さん、おはようございます。

過去の投稿を検索しようとしたら、
もう返信を頂いていてビックリしました。

>Range("a65536").End(xlUp).Row
>で、そのセルの行番号が取得できます。

>前もって「10行目」までとわかってる場合は、
>For i = 1 To 10
>でOKです。
>ちなみに、10行目から、50行目までとかなら、
>For i = 10 to 50 とか・・・・
>わ・・・わかるかしらん?(^^;

なんとかわかります。
これで2日もらってた仕事が、10分で終わります。
どうもありがとうございました。

【10118】Re:セル内の文字列のうち最後の1文字だけ...
発言  Jaka  - 04/1/8(木) 10:48 -

引用なし
パスワード
   つんさん、こんにちは。

落とし穴にはまっていますね!
このチョンボ、私も良くやります。
こうした方が良いかも...。

  For i = 1 To Range("a65536").End(xlUp).Row
    With Cells(i, 1)
      If Right(.Value, 1) = Chr(222) Then
        .Value = Left(.Value, Len(.Value) - 2)
      Else
        .Value = Left(.Value, Len(.Value) - 1)
      End If
    End With
  Next

【10120】むむむ?
質問  つん E-MAIL  - 04/1/8(木) 11:03 -

引用なし
パスワード
   Jaka さん、こんにちは〜

>落とし穴にはまっていますね!
えっ!?

>  For i = 1 To Range("a65536").End(xlUp).Row
>    With Cells(i, 1)
>      If Right(.Value, 1) = Chr(222) Then
>        .Value = Left(.Value, Len(.Value) - 2)
>      Else
>        .Value = Left(.Value, Len(.Value) - 1)
>      End If
>    End With
>  Next

ごめんなさい(T_T) わかりません。
Chr(222)って「”」ですよね??
どゆこと? 文字列が「””」で囲まれているケースがあるってこと?
すんません。請説明でございますm(__)m

【10122】ごめんなさい。わすれてた。
回答  Jaka  - 04/1/8(木) 11:20 -

引用なし
パスワード
   >ごめんなさい(T_T) わかりません。
>Chr(222)って「”」ですよね??
>どゆこと? 文字列が「””」で囲まれているケースがあるってこと?
>すんません。請説明でございますm(__)m

最後の文字が半角カナの濁音、半濁音だと、つんさんのコードだけだとポカしちゃうって事です。

For i = 1 To Range("a65536").End(xlUp).Row
  With Cells(i, 1)
     If Right(.Value, 1) = Chr(222) Or Right(.Value, 1) = Chr(223) Then
      .Value = Left(.Value, Len(.Value) - 2)
     Else
      .Value = Left(.Value, Len(.Value) - 1)
     End If
  End With
Next i

【10124】あ、なるほど
お礼  つん E-MAIL  - 04/1/8(木) 11:37 -

引用なし
パスワード
   Jaka さん、どもども

>最後の文字が半角カナの濁音、半濁音だと、つんさんのコードだけだとポカしちゃうって事です。
わかりました。
「"」じゃなくて、「゙」だったのね。
メッセージボックスで表示させてみたら、「゙」と出てたんやけど、
濁点ってのがわからなくて、「”」がそんな風に表示されてるだけかと思ってた。
確かに、半角カナのことまで頭にありませんでしたわ。
フォローありがとうございました。
私も勉強になりました。

ちなみに、天然ボケな私は(最近自覚出てきた(T_T))「Right(.Value, 1)」
で、右左がごっちゃになってて、セルの冒頭に「"」があるってどういうこと?
って思ってました。右……文字列の最後尾やんな(^^;
そういえば、自動車の教習所で「はい、つぎ右折ね」と言われて、
左に曲がりそうになって、よー怒られてましたな。

12517 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free