|
▼アル さん:
>恥ずかしながら、不勉強のためコードの理解に手こずっています。
>Try2 と Try3の組み合わせ方が今ひとつわかりません。
>さらに、
>下のような表を当てはめると、
>私が意図したプロットでは、A列で0が3つ続くところ(=B列14)、
>その14を横軸の最大値としてC軸が縦軸のグラフを作成したいのですが、
>ご教授いただいたTry3では横軸が表の最後の23までプロットされてしまいます。
>
>Try2のメッセージボックスでは、たしかに14を取得しているのですが…
それはこういうことです。
Sub Try3() の "000"位置の判定には Sub Try1()の単純な考え方のほう、
つまり、A列の数字は必ず「一桁」という条件で成り立つ方法で判断し
ているから、必ずしも一桁でないときは 文字列上で "000"のある位置
と、セル上での行数が一致しません。
> A B C
>111 0 36
>112 1 38
>113 2 45
>114 3 42
>115 4 41
>116 5 46
>117 6 49
>118 7 39
>119 8 40
>120 9 40
>121 10 15
>122 11 12
> 0 12 33
> 0 13 36
> 0 14 25
> 0 15 29
> 0 16 36
こういうA列データを Try1()で TransposeしてJoinしますと
> ss = Join(Application.Transpose(r), "")
"11111211311411511611711811912012112200000"
という文字列となり、この文字列から "000"を検索すれば、
37番目から"000"があることになります。
Try2()で 先頭の数字1文字を連結すれば、
同じデータは
"111111111111000000000000" という文字列となり、このばあいは
13番目から"000"が始まっています、
ということになります。
ですから、解決策は簡単で、
> Set r = .Range("A2", .Cells(Rows.Count, 1).End(xlUp))
> ss = Join(Application.Transpose(r), "")
Try1()条件でかいてあるこの行を
ss = Join(Application.Transpose( _
Application.Replace(r, 2, 10, "")), "")
のように Try2()方式に改めれば、すべて解決となるはずです。
|
|