Excel VBA質問箱 IV

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

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


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

【40882】文字の置換 やよ 06/7/25(火) 17:57 質問[未読]
【40885】Re:文字の置換 Kein 06/7/25(火) 18:12 発言[未読]
【40887】Re:文字の置換 へっぽこ 06/7/25(火) 18:18 質問[未読]
【40889】Re:文字の置換 やよ 06/7/25(火) 18:34 質問[未読]
【40891】Re:文字の置換 へっぽこ 06/7/25(火) 18:50 質問[未読]
【40892】Re:文字の置換 やよ 06/7/25(火) 19:31 発言[未読]
【40919】Re:文字の置換 へっぽこ 06/7/26(水) 10:44 回答[未読]
【40921】Re:文字の置換 ハチ 06/7/26(水) 11:18 発言[未読]
【40925】Re:文字の置換 Jaka 06/7/26(水) 12:43 発言[未読]
【41053】Re:文字の置換 やよ 06/7/28(金) 13:22 お礼[未読]

【40882】文字の置換
質問  やよ  - 06/7/25(火) 17:57 -

引用なし
パスワード
   こんにちは
はじめまして

今回質問させていただきますのは、

Range("A1").value="日本 アメリカ カナダ"という文字列があります。
この文字列をFunction関数を使って

Range("B1").value=日本
Range("C1").value=アメリカ
Range("D1").value=カナダ
といったように、Aの文字列のなかにある空白を分けるための
判断材料として分割してくださいといもです。


A1にどんな文字がきても、空白で分けられていれば
判断できるといったようにするためには
どうすれば良いでしょうか?
宜しくお願いいたします。

【40885】Re:文字の置換
発言  Kein  - 06/7/25(火) 18:12 -

引用なし
パスワード
   >Function関数を使って
関数にする必要はありません。まず TextToColumnsメソッド を
ヘルプで調べてみて下さい。

【40887】Re:文字の置換
質問  へっぽこ  - 06/7/25(火) 18:18 -

引用なし
パスワード
   こんにちは。
いくつか分からない点が。

> Function関数を使って

Function関数とは何でしょうか?
自分で作った関数(ユーザ定義関数)のことでしょうか?
もしそうであるならユーザ定義関数では自分以外のセル
(ユーザ定義関数を使ったセル)以外のセルに値を設定
することが出来ません。

> "日本 アメリカ カナダ"という文字列があります。

空白は半角だったり全角だったりするのでしょうか?

> 判断材料として分割してくださいといもです。

これは…
「くださいというものです。」
       ~~ ~~
で良いのでしょうか。

【40889】Re:文字の置換
質問  やよ  - 06/7/25(火) 18:34 -

引用なし
パスワード
   ▼へっぽこ さん:
>こんにちは。
>いくつか分からない点が。
>
>> Function関数を使って
>
>Function関数とは何でしょうか?
>自分で作った関数(ユーザ定義関数)のことでしょうか?
>もしそうであるならユーザ定義関数では自分以外のセル
>(ユーザ定義関数を使ったセル)以外のセルに値を設定
>することが出来ません。
>
>> "日本 アメリカ カナダ"という文字列があります。
>
>空白は半角だったり全角だったりするのでしょうか?
>
>> 判断材料として分割してくださいといもです。
>
>これは…
>「くださいというものです。」
>       ~~ ~~
>で良いのでしょうか。


説明不足で申し訳ございません。
よく考えると、Function関数でなくて
よいです。

Sub test()
Range("A1").Value = "日本 アメリカ カナダ"

この間にコードを記入

Range("B1").Value = ""
Range("C1").Value = ""
Range("D1").Value = ""
End Sub

このような問題です。
ただ、A1セルの文字は空白を使ってますが、
変数になります。

すみませんが宜しくお願いします。

【40891】Re:文字の置換
質問  へっぽこ  - 06/7/25(火) 18:50 -

引用なし
パスワード
   んーっと…(^ー^;)

> ただ、A1セルの文字は空白を使ってますが、
> 変数になります。

今度はこれの意味が…

何で区切るかは固定で決まっておらず、ある変数の中に入っている
文字で区切りたい。
ということでしょうか?

【40892】Re:文字の置換
発言  やよ  - 06/7/25(火) 19:31 -

引用なし
パスワード
   ▼へっぽこ さん:
>んーっと…(^ー^;)
>
>> ただ、A1セルの文字は空白を使ってますが、
>> 変数になります。
>
>今度はこれの意味が…
>
>何で区切るかは固定で決まっておらず、ある変数の中に入っている
>文字で区切りたい。
>ということでしょうか?

何度もすみませんです。

正確にやりたいことをかかせていただきます。

Aセルにある文字列を一文字ずつ拾ってきて、
そこからスペースで区切っているところまでを
一文字として、別のセルに持ってきたいです。

Aセルに"日本 アメリカ カナダ"
という文字列がある場合は

B1="日"&"本"
C1="ア"&"メ"&"リ"&"か"
D1="カ"&"ナ"&"ダ"

といった感じで、文字列を生成していきたいのですが、
Functionを使えというのが条件になっております。

こんな質問のしかたで申し訳ございませんが
宜しくお願いします。

【40919】Re:文字の置換
回答  へっぽこ  - 06/7/26(水) 10:44 -

引用なし
パスワード
   うーん…?よくわかりませんがとりあえず言われるがままに作ってみました。
(こんなんでいいのかな?でも言われたとーりだと思うけど)

Sub サンプル1()
  Dim 最終行 As Long
  Dim 処理行 As Long
  Dim 文字列 As String
  Dim 左側の文字列 As String
  Dim 設定列 As Long
  Dim 設定内容 As String
  Dim i As Long
  '1.A65536セルでCtrl+↑として位置付く行番号取得する。
  最終行 = Range("A65536").End(xlUp).Row
  '2.1行目〜最終行まで処理する。
  For 処理行 = 1 To 最終行
    '3.処理行のA列の内容を取得する。
    文字列 = Cells(処理行, "A").Value
    設定列 = 1
    '4.3で取得した文字列がなくなるまで処理を繰り返す。
    ' (Do〜Loopの中で空白ごとに分割する処理を行う)
    Do Until 文字列 = ""
      '5.function文字列分割処理に文字列を渡して空白で区切った
      ' 左辺を「左側の文字列」に受け取る。
      左側の文字列 = 文字列分割処理(文字列, " ")
      '6.セルに設定するための内容を保持する変数「設定内容」をいったん
      ' ここでクリアしておく。
      設定内容 = ""
      '7.5で受け取った左側の文字列の文字の個数分処理を繰り返す。
      For i = 1 To Len(左側の文字列)
        If i = 1 Then
          '8.最初の1回目はイコールを頭につける。
          設定内容 = "="
        Else
          '9.2回目からはアンドで繋ぐ。
          設定内容 = 設定内容 & "&"
        End If
        '10.左側の文字列を1文字づつダブルクォーテーションで囲む。
        設定内容 = 設定内容 & """" & Mid(左側の文字列, i, 1) & """"
      Next
      '11.設定先の列を一つカウントアップ(1つ右の列へ)
      設定列 = 設定列 + 1
      '12.8〜10で蓄えた内容をセルに設定する。
      Cells(処理行, 設定列).Value = 設定内容
    Loop
  Next
  
  MsgBox "おしまい"
End Sub

Function 文字列分割処理(文字列 As String, 区切り文字 As String) As String
  Dim 発見位置 As Long
  '13.文字列中の何桁目に区切り文字があるか調べる。
  発見位置 = InStr(文字列, 区切り文字)
  
  If 発見位置 = 0 Then
    '14.無い場合。文字列丸ごとを左辺として返す。
    文字列分割処理 = 文字列
    文字列 = ""
  Else
    '15.あった場合。区切り文字の左辺を戻り値とし、右辺を文字列に戻す。
    文字列分割処理 = Left(文字列, 発見位置 - 1)
    文字列 = Mid(文字列, 発見位置 + Len(区切り文字))
  End If
End Function

Sub 文字列分割処理のテスト用()
  Dim 処理前の文字列 As String
  Dim 処理後の文字列 As String
  Dim 左側の文字列 As String
  
  処理前の文字列 = "日本 アメリカ"
  処理後の文字列 = 処理前の文字列
  左側の文字列 = 文字列分割処理(処理後の文字列, " ")
  MsgBox "処理前の文字列=(" & 処理前の文字列 & ")" & vbCrLf & _
    "↓" & vbCrLf & "左側の文字列=(" & 左側の文字列 & ")" & vbCrLf & _
    "処理後の文字列=(" & 処理後の文字列 & ")"
End Sub

【40921】Re:文字の置換
発言  ハチ  - 06/7/26(水) 11:18 -

引用なし
パスワード
   ▼やよ さん:
横から失礼します。
Excel2000以降ならSplitを使ったユーザー定義関数を作れば
いけそうですが・・
見当違いだったスイマセン。

標準モジュールに下記のコードを。

A1セルに文字列があるとして

B1セルに =Split_No(A1," ",1)
C1セルに =Split_No(A1," ",2)
・・・
と入力してみてください。
複数セルには対応してません。

Function Split_No(セル As Range, 区切 As String, 番号 As Integer) As String

Dim buf() As String
Dim i As Integer

If セル.Cells.Count > 1 Then
  Split_No = "複数セルはダメ"
  Exit Function
End If

buf = Split(セル.Value, 区切)
'配列は0からの為、-1する
i = 番号 - 1
If UBound(buf) >= i Then
  Split_No = buf(i)
Else
  '番号が分割数を上回ったら""を返す
  Split_No = ""
End If

Erase buf

End Function

【40925】Re:文字の置換
発言  Jaka  - 06/7/26(水) 12:43 -

引用なし
パスワード
   >よく考えると、Function関数でなくて
>よいです。
>Functionを使えというのが条件になっております。
どっちなのか解らないので、Subプロシジャーにしました。
エクセル関数を作りたいのでしょうか?
だとしたら配列関数が必要になると思います。
ichinoseさんが得意です。

>B1="日"&"本"
>C1="ア"&"メ"&"リ"&"か"
>D1="カ"&"ナ"&"ダ"
また、これの意味がよく解らないけど...。
B1セルに「"日"&"本"」と表示させたいのでしょうか?

Dim st As String, TB As Variant
st = Trim(Range("A1").Value)
'st = Application.Substitute(st, " ", " ")
st = Replace(st, " ", " ")
Do Until InStr(1, st, " ") = 0
  'st = Application.Substitute(st, " ", " ")
  st = Replace(st, " ", " ")
Loop
TB = Split(st, " ")
Range("B1").Resize(, UBound(TB) + 1).Value = TB

【41053】Re:文字の置換
お礼  やよ  - 06/7/28(金) 13:22 -

引用なし
パスワード
   みなさまがたへ

おそくなりまして、申し訳ございませんでした。
大変ありがとうございました!
たすかりました^^

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