Excel VBA質問箱 IV

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

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


4022 / 13644 ツリー ←次へ | 前へ→

【58783】セル内改行 Upa 08/11/10(月) 11:27 質問[未読]
【58787】Re:セル内改行 Jaka 08/11/10(月) 11:49 発言[未読]
【58788】Re:セル内改行 Jaka 08/11/10(月) 12:15 発言[未読]
【58791】Re:セル内改行 Upa 08/11/10(月) 13:45 発言[未読]
【58789】Re:セル内改行 にぃ 08/11/10(月) 13:13 発言[未読]
【58792】Re:セル内改行 Upa 08/11/10(月) 13:49 発言[未読]
【58793】Re:セル内改行 にぃ 08/11/10(月) 14:37 発言[未読]
【58796】Re:セル内改行 Yuki 08/11/10(月) 15:38 発言[未読]
【58804】Re:セル内改行 Upa 08/11/11(火) 9:53 お礼[未読]
【58805】Re:セル内改行 にぃ 08/11/11(火) 10:19 発言[未読]
【58819】Re:セル内改行 Upa 08/11/12(水) 15:54 お礼[未読]

【58783】セル内改行
質問  Upa  - 08/11/10(月) 11:27 -

引用なし
パスワード
   1つのセル内に
192.168.0.1    192.168.0.5  192.168.9.50 192.168.224.234
とIPが記載されているセルが
Hの列に100行ほどあります
これをセルごとに下記のような形に変換したいのでうすがどうしたらよろしいでしょうか
192.168.0.1
192.168.0.5
192.168.9.50
192.168.224.234

前提として
データを記入する者が
書式という概念すらない全くの素人で尚且つ
操作を覚えようとする気も無い方々を相手に作成ねばならないため
数字は半角全角が入り混じり
ブランクの数、半角全角もばらばらな状態です
その方々が記入てきたファイルをこちらで修正する流れになっております

【58787】Re:セル内改行
発言  Jaka  - 08/11/10(月) 11:49 -

引用なし
パスワード
   半角、全角スペースを1つ単位というかにするにはエクセル関数を使うと便利です。

MsgBox Application.Trim("aa  bbb    cc dd  ")


それをこんな感じにvariant型の変数にSplitで、半角スペースごとに1次元配列に入れる。
その配列をセルに代入するわけだけど、1次元配列だから縦方法に入らないので、
エクセル関数のTransposeで入れ替えて入れる。
尚エクセル関数で扱える配列の大きさは5千なんぼぐらいなので注意。
(2002以降は、まだ確認を取ってない。)

Dim tb As Variant
st = "aa bbb cc dd"
tb = Split(st, " ")
Range("A1").Resize(UBound(tb)).Value = Application.Transpose(tb)

【58788】Re:セル内改行
発言  Jaka  - 08/11/10(月) 12:15 -

引用なし
パスワード
   各セルに振り分けるのでなく、もしかしてこんな感じの事?

=SUBSTITUTE(TRIM(A1)," ",CHAR(10))

【58789】Re:セル内改行
発言  にぃ  - 08/11/10(月) 13:13 -

引用なし
パスワード
   ▼Upa さん:
こんにちは!

Jakaさんと似たような感じですが、こんな感じ?
セル内で改行しちゃえばいいのかな?

Sub test3()

  Dim i As Integer
  Dim j As Integer
  
  i = Range("H" & Rows.Count).End(xlUp).Row 'Hの最終行
  
  For j = 1 To i 'H1から最終行まで
  
    Cells(j, 8).Replace what:=" ", replacement:=Chr(10) '空白を改行にします

  Next
  
End Sub

【58791】Re:セル内改行
発言  Upa  - 08/11/10(月) 13:45 -

引用なし
パスワード
   説明不足で申し訳ございません

該当のセルはセルが結合されていたりいなかったりランダムなうえ
表示結果としては
出力する値は
セル内の値はセルの分解をしないように表示したく思います

【58792】Re:セル内改行
発言  Upa  - 08/11/10(月) 13:49 -

引用なし
パスワード
   にぃさんありがとうございます
実データではセル内のスペースが半角全角混じっており
数がランダムなので
これでスペースの数だけ改行されるのを改善できればと思います

【58793】Re:セル内改行
発言  にぃ  - 08/11/10(月) 14:37 -

引用なし
パスワード
   ▼Upa さん:

>実データではセル内のスペースが半角全角混じっており
>数がランダムなので
>これでスペースの数だけ改行されるのを改善できればと思います

私の力量ですとこんな感じですがいかかでしょう?

Sub test4()

  Dim i As Integer
  Dim j As Integer
  Dim k As Integer
 
  i = Range("H" & Rows.Count).End(xlUp).Row 'Hの最終行
 
  For j = 1 To i 'H1から最終行まで
 
    Cells(j, 8).Replace what:=" ", replacement:=Chr(10) '半角空白を改行にします
    Cells(j, 8).Replace what:=" ", replacement:=Chr(10) '全角空白を改行にします
    Cells(j, 8).Replace what:=Chr(10) & Chr(10), replacement:=Chr(10) '改行が二つあったらひとつに
    k = InStr(Cells(j, 8).Value, Chr(10) & Chr(10)) '改行が二つ以上あるかチェック
    If k > 0 Then j = j - 1 '改行が二つ以上ある場合、もう一度ループ
    
  Next
 
End Sub

【58796】Re:セル内改行
発言  Yuki  - 08/11/10(月) 15:38 -

引用なし
パスワード
   ▼Upa さん:
こんにちは。
A列の値をB列に表示しています。

>にぃさんありがとうございます
>実データではセル内のスペースが半角全角混じっており
>数がランダムなので
>これでスペースの数だけ改行されるのを改善できればと思います
Sub TEST()
  Dim v1 As Variant
  Dim v2 As Variant
  Dim i  As Long
  
  v1 = Range("A1").CurrentRegion.Resize(, 1).Value  'A列の場合
  ReDim v2(1 To UBound(v1), 1 To 1)
  For i = 1 To UBound(v1)
    v2(i, 1) = Join(Split(Application.Trim(StrConv(v1(i, 1), vbNarrow)), " "), Chr(10))
  Next
  Range("B1").Resize(UBound(v2)).Value = v2      'B列に張付け
End Sub

【58804】Re:セル内改行
お礼  Upa  - 08/11/11(火) 9:53 -

引用なし
パスワード
   にぃさん、Yukiさんありがとうございます
特ににぃさんにいただきました
k = InStr(Cells(j, 8).Value, Chr(10) & Chr(10)) '改行が二つ以上あるかチェック
この1文は他にもいろいろと対応でき大変助かりました。

【58805】Re:セル内改行
発言  にぃ  - 08/11/11(火) 10:19 -

引用なし
パスワード
   ▼Upa さん:
>k = InStr(Cells(j, 8).Value, Chr(10) & Chr(10)) '改行が二つ以上あるかチェック
>この1文は他にもいろいろと対応でき大変助かりました。

おはようございます!
もう見てないかもしれませんが補足としまして。

InStr関数は本来 k = InStr("セル指定", "探したい文字") として普段は使用し、
"セル指定"の中の文字から"探したい文字"を探し、見つけた場合
左からの文字数をkに返してくれます。
"探したい文字"が見当たらなければ k=0 となりますので今回このような
形(改行を検索)で使用しました。

もうヘルプなど見ていた場合重複してしまいますがm(__)m

【58819】Re:セル内改行
お礼  Upa  - 08/11/12(水) 15:54 -

引用なし
パスワード
   ▼にぃ さん>
>おはようございます!
>もう見てないかもしれませんが補足としまして。
>
>InStr関数は本来 k = InStr("セル指定", "探したい文字") として普段は使用し、
>"セル指定"の中の文字から"探したい文字"を探し、見つけた場合
>左からの文字数をkに返してくれます。
>"探したい文字"が見当たらなければ k=0 となりますので今回このような
>形(改行を検索)で使用しました。
>
>もうヘルプなど見ていた場合重複してしまいますがm(__)m
御丁寧に解説ありがとうございます
大変勉強になりました

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