|
▼かみちゃん さん:
こんにちは。しんです。
>
> For i = 1 To .Range("A1").End(xlDown).Row
> If IsEmpty(.Cells(i, 3).Value) Then
> ReDim Preserve Ary1(j): Ary1(j) = .Cells(i, 1).Value
> ReDim Preserve Ary2(j): Ary2(j) = .Cells(i, 2).Value '★
> ReDim Preserve Ary3(j): Ary3(j) = ""
> j = j + 1
>
のようにコードを修正したら例題はうまく処理できました。また、かみちゃん提案のVBAコードもさきほどのメールのように修正しましたら、これも正常に処理できました。どうもありがとうございます。
>なお、「列の制約」ですが、「行と列の数は任意とします。要は最終列にあるカ
>ンマ区切りのデータを分離」とあるのですが、最終列を取得して処理し、その左
側全列を一緒に転記するよな仕組みにして下さい。
>たとえば、最終列がJ列だったとすれば、J列をカンマ区切りの処理をする。
>処理後、
A列、B列、C列、D列、E列、F列、H列とI列とともに転記するような仕組みを望んでいます。
>それと、最終列を取得するときに使いたいのですが、タイトル行は、1行目に必
>ずあるものと
します。
また場合によっては2行目に副タイトル行があり、その場合はSheet2には副タイトル行は表示しないようにしたいんです(これはオプションで、副タイトル行あり(
option=1)、なし(option=2)の判断をあらかじめオプションとして選ぶ)。すなわち、「副タイトル行あり」のオプションを選択した場合は、Sheet1の表のカンマ区切り変換処理は3行目から行うことになり、そうでない場合は2行目からの処理とします。ただし、出力結果を表示するタイトル行はSheet1の1行目をSheet2の1行目に転記し、Sheet2の2行目以降はSheet1でカンマ区切り文字列データを処理した行全体が出力されるようにします。
Sheet1とSheet2は同じブックでもよく、またSheet1しかないブックに新たにSheet2を挿入し、そこへ変換結果を出力するという風にしたいんです。要はSheet1の上に変換結果を上書きしないように別のワークシートに変換結果を出力したいだけです。(ですからの別のブックのSheet1に変換結果を表示するのでもいいです。)
>私もKeinさんも、A1から始まる3列に対して処理をすることを考えて
いらっしゃるようですが、A1から始まる任意の列に対して処理をして欲しいのです(ただし、カンマ区切りのある文字列データは必ず最終列にあるものとします。
以上、よろしくお願いします。
オプション2が少しややこしいかも知れませんので例題を挙げておきます。
オプション2を選んだ場合(option=2):
Sheet1(変換前)
┌─┬─┬─┬───┐
│A │B │C │D │←タイトル行
├─┼─┼─┼───┤
│A'│B'│C'│D' │←副タイトル行
├─┼─┼─┼───┤
│1 │あ│ │a │
├─┼─┼─┼───┤
│2 │い│甲│ │
├─┼─┼─┼───┤
│3 │う│乙│b,c │
├─┼─┼─┼───┤
│4 │え│丙│d │
├─┼─┼─┼───┤
│5 │お│ │e,f,g │
└─┴─┴─┴───┘
Sheet2(変換後)
┌─┬─┬─┬───┐
│A │B │C │D │←タイトル行
├─┼─┼─┼───┤
│1 │あ│ │a │
├─┼─┼─┼───┤
│2 │い│甲│ │
├─┼─┼─┼───┤
│3 │う│乙│b │
├─┼─┼─┼───┤
│3 │う│乙│c │
├─┼─┼─┼───┤
│4 │え│丙│d │
├─┼─┼─┼───┤
│5 │お│ │e │
├─┼─┼─┼───┤
│5 │お│ │f │
├─┼─┼─┼───┤
│5 │お│ │g │
└─┴─┴─┴───┘
のうようにしたいんですが、どうかよろしくお願いします。
|
|