[[20230106080353]] 『特定文字で分割して書き出す』(ハイチ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『特定文字で分割して書き出す』(ハイチ)

検索シートのA列に以下のDATAがある場合に

     |[A]                                   
 [1] |X:\                                   
 [2] |Y:\AA\あああ                          
 [3] |Y:\AA\あああ\いいい                   
 [4] |Y:\AA\あああ\ううう                   
 [5] |Y:\AA\あああ\えええ                   
 [6] |Y:\AA\あああ\おおおお                 
 [7] |Y:\AA\あああ\おおおお\かかかか)\くくく
 [8] |Y:\AA\あああ\おおおお\けけけ          
 [9] |Y:\AA\あああ\おおおお\けけけ\こここ   
 [10]|Y:\AA\あああ\おおおお\さささ          

分割シートに下記のように\で区切って
別々の列に表示したい

    |[A]|[B]|[C]     |[D]     |[E]   
 [1]|X: |   |        |        |      
 [2]|Y: |AA |あああ  |        |      
 [3]|Y: |AA |いいい  |        |      
 [4]|Y: |AA |ううう  |        |      
 [5]|Y: |AA |おおおお|        |      
 [6]|Y: |AA |おおおお|かかかか|くくく
 [7]|Y: |AA |おおおお|けけけ  |      
 [8]|Y: |AA |おおおお|けけけ  |こここ
 [9]|Y: |AA |おおおお|さささ  |      

'-------------------------------

私案として以下のコードを候補に上げましたが
シートへの書き出しで上手く処理できません。

どのように修正すれば良いでしょうか ?

Sub 分割()

Dim sh1 As Worksheet, sh2 As Worksheet, sh3 As Worksheet

Set sh1 = Worksheets("DATA")
Set sh2 = Worksheets("検索")
Set sh3 = Worksheets("分割")

'書き出しシートを初期化
sh3.cells.Clear

'ターゲットセルを分割
Dim i As Long
Dim ii As Long
Dim lc As Long
Dim S_Max As Long

Dim S As Variant '配列

lc = sh2.cells(sh2.Rows.Count, 1).End(xlUp).Row '処理総数

For i = 1 To lc

    S = Split(sh2.cells(i, "A"), "\")  '¥で要素に分割
    S_Max = UBound(S)  '要素の総数
    For ii = 0 To S_Max
        sh3.cells(ii + 1, i) = S(ii)
    Next
Next

End Sub

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


>シートへの書き出しで上手く処理できません。
どのようにうまくいかないのか説明してください。(それで気が付くことがありませんか?)
(確認) 2023/01/06(金) 08:26:02

標準機能ですれば良いです。
https://support.microsoft.com/ja-jp/office/%E5%8C%BA%E5%88%87%E3%82%8A%E4%BD%8D%E7%BD%AE%E6%8C%87%E5%AE%9A%E3%82%A6%E3%82%A3%E3%82%B6%E3%83%BC%E3%83%89%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6-%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E5%88%97%E3%81%AB%E5%88%86%E5%89%B2%E3%81%99%E3%82%8B-30b14928-5550-41f5-97ca-7a3e9c363ed7
(フォーキー) 2023/01/06(金) 08:34:32

理想は、下記ですが

    |[A]|[B]|[C]     |[D]     |[E]   
 [1]|X: |   |        |        |      
 [2]|Y: |AA |あああ  |        |      
 [3]|Y: |AA |いいい  |        |      
 [4]|Y: |AA |ううう  |        |      
 [5]|Y: |AA |おおおお|        |      
 [6]|Y: |AA |おおおお|かかかか|くくく
 [7]|Y: |AA |おおおお|けけけ  |      
 [8]|Y: |AA |おおおお|けけけ  |こここ
 [9]|Y: |AA |おおおお|さささ  |      

実際は、下記のように書き出されます。

    |[A]|[B]   |[C]   |[D]   |[E]   |[F]     |[G]      |[H]     |[I]     |[J]     
 [1]|X: |Y:    |Y:    |Y:    |Y:    |Y:      |Y:       |Y:      |Y:      |Y:      
 [2]|   |AA    |AA    |AA    |AA    |AA      |AA       |AA      |AA      |AA      
 [3]|   |あああ|あああ|あああ|あああ|あああ  |あああ   |あああ  |あああ  |あああ  
 [4]|   |      |いいい|ううう|えええ|おおおお|おおおお |おおおお|おおおお|おおおお
 [5]|   |      |      |      |      |        |かかかか)|けけけ  |けけけ  |さささ  
 [6]|   |      |      |      |      |        |くくく   |        |こここ  |        
(ハイチ) 2023/01/06(金) 08:36:20

列がずれているのだから、原因に気が付きませんか?
 Sub test()
     Dim sh2 As Worksheet, sh3 As Worksheet
     Dim i As Long, ii As Long, s
     Set sh2 = Worksheets("検索")
     Set sh3 = Worksheets("分割")
     For i = 1 To sh2.Cells(Rows.Count, 1).End(xlUp).Row
         s = Split(sh2.Cells(i, 1), "\")
         For ii = 0 To UBound(s)
             sh3.Cells(i, ii + 1) = s(ii)
         Next
     Next
 End Sub
(フォーキー) 2023/01/06(金) 08:57:20

 >列がずれている
行列が入れ替わっている、でした。
(フォーキー) 2023/01/06(金) 08:59:51

フォーキーさん、いつもアドバイス頂きありがとうございます。

標準機能を利用できるとの事なので
 手順を「マクロの記録」で記録して後でコードを見直す(改良、改正)する事にしました。

しかし、上手くいきません。

1.検索シートのA列(分割する文字列を含む列)をクリックして選択
2.[データ]、[区切り位置] の順に選択
3.[区切り位置指定ウィザード] で、[区切り表現付き]、[次へ] の順に選択
4.データの [区切り文字] を選択¥(ドルマーク)を指定
5.[次へ] を選択します。

1)-5)までは、上手く指定できていると思います。

6.分割データを表示するワークシートで [表示先] を選択。
ここ(ウイザード1/3)で表示先が悪いので
表示先の参照が正しくありません。
とエラーとなり受け付けてくれません。

分割シートのどこを「表示先」に指定したら良いのでしょうか?

’−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
とここまで記載していて
上記内容を書き出す前に08:57,08:59の2つの書き込みが有りました。

コードを見直して
2つのアドバイスでようやく理解できました。

以下のように変更して上手く処理できました。
今回も初歩的なミスに気が付かず、ごめんなさい。

For ii = 0 To S_Max

        sh3.cells(i, ii + 1) = S(ii)
Next
(ハイチ) 2023/01/06(金) 09:12:49

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.