Excel VBA質問箱 IV

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

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


12665 / 13645 ツリー ←次へ | 前へ→

【9296】不要なスペースの削除 eri 03/11/27(木) 14:16 質問
【9297】Re:不要なスペースの削除 つん 03/11/27(木) 14:28 回答
【9298】Re:不要なスペースの削除 INA 03/11/27(木) 14:29 回答
【9299】Re:不要なスペースの削除 eri 03/11/27(木) 14:49 発言
【9300】じゃ、逆にしたらどかな? つん 03/11/27(木) 15:01 回答
【9301】そうですね! eri 03/11/27(木) 15:08 お礼
【9304】もう解決済みかな? こうちゃん 03/11/27(木) 17:00 発言
【9305】参考になります! eri 03/11/27(木) 17:24 お礼

【9296】不要なスペースの削除
質問  eri  - 03/11/27(木) 14:16 -

引用なし
パスワード
   初めまして、知識不足でわからないことがあるので何かアドバイスお願い致します。

一つのセル内に、Alt + Enterで改行された文字列が入っています。
例としては

select
  aaa,
  bbb,
  ccc,
from
  TABLE
where
  ddd = '1'

という様な感じです。見た目にわかりやすくするためにこの様に入っています。
これをテキストに落としたいのですが、
テキストには「select aaa, bbb, ccc, from TABLE where ddd = '1'」
という様な形で落としたいと思っています。
改行を削除するまでは出来たのですが、どうしてもインデント部分の余分なスペースが残ってしまいます。
(「select  aaa,  bbb,  ccc,from  TABLE where  ddd = '1'」の様になる)
余分な2つ以上のスペースの部分のみ、1つのスペースに置換したいのですが、うまいやり方が見つかりません。
文字列を一文字ずつ見ていく様なロジックを作成しないと出来ないでしょうか?
マクロやVBAの関数にあまり詳しくないので、何か使える様な関数があれば教えて頂きたいと思っています。
よろしくお願いします。

【9297】Re:不要なスペースの削除
回答  つん E-MAIL  - 03/11/27(木) 14:28 -

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

>余分な2つ以上のスペースの部分のみ、1つのスペースに置換したいのですが、うまいやり方が見つかりません。

こうかな?

Sub test()

  Dim str As String
  
  str = "select  aaa,  bbb,  ccc,from  TABLE where  ddd = '1'"
  
  str = Replace(str, "  ", " ")
  'str = Application.WorksheetFunction.Substitute(str, "  ", " ")
  
  MsgBox str

End Sub

これで、スペース2つ分のところが、スペース1つに置き換わると思います。
Replace関数は確かエクセル2000以上限定だったので、
97とかだったら、コメントアウトしてるやり方(ワークシート関数使ってるにゃ)でOKやと思います。

試してみてね

【9298】Re:不要なスペースの削除
回答  INA  - 03/11/27(木) 14:29 -

引用なし
パスワード
   スペースが何個入っているか分かりませんが、
一般機能の「置換」で、

"   "  ←半角スペース5個のつもり
 ↓
" "    ←半角スペース1個のつもり

のように置き換えてはいかがでしょうか?

あとは同様に、スペース4個、スペース3個、スペース2個と
繰り返せば、出来ると思います。

 

【9299】Re:不要なスペースの削除
発言  eri  - 03/11/27(木) 14:49 -

引用なし
パスワード
   つん様、INA様、ご返信の方ありがとうございます。

すみません、少し状況説明が足りなかった様なので追記させてください。
このシートは色々な方が使うSQL生成ツールの様なもので、
人によってスペースの数(2つの人も居れば4つ、8つの人も…)が違かったりします。
固定であるならばつん様の様な形で出来るとは思っていたのですが、スペースの数が判断できないので、
数に関係なく1つのスペースに置換できるものがあれば…と思って投稿させて頂きました。

INA様の方は、Excelの置換機能を使用するという事でしょうか?
Excelの中身も、落としたテキストも、ツールを使って頂く方にいじらせたくないので、
全て自動で作成できるように、VBA内で行いたいと思っています。

ややこしいものですみません、よろしくお願い致します。

【9300】じゃ、逆にしたらどかな?
回答  つん E-MAIL  - 03/11/27(木) 15:01 -

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

すんません。確かに2つ以上のスペースってありましたね(^^;
ほんなら、改行コードを取り除く処理と、スペースの処理を逆にしたらどうですか?

まず、スペースを全て取り除く。
次に、改行コードを、スペース1つと置き換える。

どうでしょう?
それでも都合悪いかな?

【9301】そうですね!
お礼  eri  - 03/11/27(木) 15:08 -

引用なし
パスワード
   つん様

そうですね、それなら可能かもしれないです。
元々あるスペースまで取り除いてしまうので、改行の使い方によってはうまくいかないかもしれませんが
その方法でやってみたいと思います!

また行き詰ってしまったら、再度ご質問させて頂くかもしれませんが。
その時はまたよろしくお願い致します;
つん様、INA様、本当にありがとうございます、凄く助かりました。

【9304】もう解決済みかな?
発言  こうちゃん E-MAIL  - 03/11/27(木) 17:00 -

引用なし
パスワード
   eriさん、みなさん、こんにちは
もう解決済みですかね?
ループ回したらいかがでしょう?

Sub test()

  Dim str As String
 
  str = "select   aaa, bbb,   ccc, from TABLE where   ddd = '1'"
 
  Do While InStr(str, " ")
    str = Replace(str, " ", " ")
  Loop
 
  MsgBox str

End Sub

【9305】参考になります!
お礼  eri  - 03/11/27(木) 17:24 -

引用なし
パスワード
   こうちゃん様

わざわざ別の方法での解決策、ありがとうございます。
そうですね、これなら確実にスペースいくつあっても1つにしてくれますね。
思いつかなかったです。
こちらの方法でも試してみたいと思います。

大変勉強になりました。ありがとうございます。

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