- ベストアンサー
こんなVBAを作りたいのですが
以下のような表があります。 (Sheet1) A列 ??? ?? ???? ! ???? ? ??? ?? ! 以下続く (?は何らかの文字とします。各行の文字数はランダムと思って下さい) !マークがくるまでの文字数(上の例では?の数)を他のシートに書き出したいのです。 上の例からすると、 (Sheet2) A列 9 10 以下続く のような感じです。 文字数をカウントするのだから、Lenを使いそうだなとの予測はあります。 しかし、VBA初心者のため、その先のアイデアが出てきません。 どうしたら良いのでしょうか。 分かる方、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Sub test01() Dim x As Long, n As Long Sheets("Sheet1").Activate Sheets("Sheet1").Cells(1, 1).Activate Do Until ActiveCell.Value = "" If StrConv(Trim(ActiveCell.Value), vbNarrow) <> "!" Then x = x + Len(ActiveCell.Value) Else n = n + 1 Sheets("Sheet2").Cells(n, 1).Value = x x = 0 End If ActiveCell.Offset(1).Activate Loop End Sub ではいかがでしょうか? A列のデータが途切れたところで終了します。
その他の回答 (3)
- merlionXX
- ベストアンサー率48% (1930/4007)
> 結果がどこにも出てきません。 変ですねえ。今も試してみましたが、ご指定のSheet2のA列1行目から下へ結果が入りましたが・・・。 データがSheet1のA1からちゃんとありますか? もしA1が空白だと作動しないですよ。
お礼
上手くいきました! 手持ちのデータベースに合うよう、少々内容を変えたのですが、私の勘違いにより誤作動していました。 ありがとうございました。本当に助かります!
- himajin100000
- ベストアンサー率54% (1660/3060)
あ、俺の駄目です。 ?に!が含まれたらアウトでした。撤回します
お礼
アイデアありがとうございます。 参考にしてVBAを勉強したいと思います!
- himajin100000
- ベストアンサー率54% (1660/3060)
Option Explicit Sub hoge() Dim Str As String Dim Strs As Variant Dim i As Integer Dim j As Integer Str = "" For i = 1 To 30 Str = Str & CStr(Sheets("Sheet1").Cells(i, 1).Value) Next i Strs = Split(Str, "!") For j = 0 To UBound(Strs) Sheets("Sheet1").Cells(j + 1, 1).Value = Len(Strs(j)) Next j End Sub こんなのしか思いつかなかった。
お礼
回答ありがとうございます。 早速試してみたところ、なにやら数え上げている雰囲気はあるのですが、結果がどこにも出てきません。何故でしょう…。