• ベストアンサー

こんなVBAを作りたいのですが

以下のような表があります。 (Sheet1) A列 ??? ?? ???? ! ???? ? ??? ?? ! 以下続く (?は何らかの文字とします。各行の文字数はランダムと思って下さい) !マークがくるまでの文字数(上の例では?の数)を他のシートに書き出したいのです。 上の例からすると、 (Sheet2) A列 9 10 以下続く のような感じです。 文字数をカウントするのだから、Lenを使いそうだなとの予測はあります。 しかし、VBA初心者のため、その先のアイデアが出てきません。 どうしたら良いのでしょうか。 分かる方、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

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列のデータが途切れたところで終了します。

type-RRR
質問者

お礼

回答ありがとうございます。 早速試してみたところ、なにやら数え上げている雰囲気はあるのですが、結果がどこにも出てきません。何故でしょう…。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

> 結果がどこにも出てきません。 変ですねえ。今も試してみましたが、ご指定のSheet2のA列1行目から下へ結果が入りましたが・・・。 データがSheet1のA1からちゃんとありますか? もしA1が空白だと作動しないですよ。

type-RRR
質問者

お礼

上手くいきました! 手持ちのデータベースに合うよう、少々内容を変えたのですが、私の勘違いにより誤作動していました。 ありがとうございました。本当に助かります!

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

あ、俺の駄目です。 ?に!が含まれたらアウトでした。撤回します

type-RRR
質問者

お礼

アイデアありがとうございます。 参考にしてVBAを勉強したいと思います!

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

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 こんなのしか思いつかなかった。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • どのようなVBAを書けばよいでしょうか

    以下のような表があります。 (sheet1) A列    B列    続く… タイトル1 タイトル2  …     (←一行目にタイトル) 13     5          (←二行目から数字がランダムに)  18    14 44    33 36    87 22    11 14    14 27    24 21    39 32    62 35     5 44     4 12     3 (以下続く。各列が何行で終わるかもランダム) 「各列の数列の平均と分散」「列全体を含めての平均と分散」 を、新たなシートに書き出したいのです。 上の例からすると、 (sheet2) A列    B列   C列       平均   分散    (←一列目) タイトル1  ??   ??    (←二列目から結果を) タイトル2  ??   ??  … 全体     ??   ?? のような感じです。 データの量が多いので、手作業で関数を使っていては、莫大な時間を要してしまいます。 どのようなVBAを書けばいいのでしょうか。 分かる方、よろしくお願いします。

  • 各行をソートするVBAについて

    図のようにランダムに数値が並んでいるデータが約600行くらいあります。その各行にA列を除く列で、数値の小さい順に並べるVBAのようなものがあればと思って質問させていただきました。 詳しい方からのアドバイスをいただけますと幸いです。よろしくお願いします。

  • どのようなVBAを書けば良いのでしょうか

    以下のようなデータがあります。 ?の部分はランダムな値が入っていると考えて下さい。 A列 B列 C列 D列 E列 F列 ?  ?  ?  ?   ?  ? ?  ?  ?  ?   ?  ? ?  ?  ?  ?   ?  ? 「  「   「   「    「   「 ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? 」  」    」   」    」   」 ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? 「  「  「   「    「   「 ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? 」  」    」   」    」   」 ?  ?  ?  ?    ?  ? 以下不規則にデータは続く このデータの「」と「」内のデータを消したいのです。 正確に言えば、セルを削除して、上方向にシフトしたいのです。 つまり、上の例からすると A列 B列 C列 D列 E列 F列 ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? ?  ?  ?  ?    ?  ? ?  ?  ?  ?   ?  ? 以下不規則にデータは続く のような形に加工したいのです。 ただセルを削除して、上方向にシフトするには、 オブジェクト.Delete Shift:=xlShiftUp を使えば良いことまでは分かりました。 しかし、求める形にデータを加工するには、どのような制御構造を書けば良いのか、正直手詰まりです。 VBA初心者のため、アイデアに限りがあって…。 分かる方、お手数をおかけしますが、よろしくお願いします。

  • どうVBAを書けばいいのでしょうか

    以下のような表があります。 (sheet1) A列 不規則な数列(←一行目にタイトルが書き込まれています) 13   (←二行目から数字がランダムに書き込まれています)    18 44 36 22 14 27 21 32 35 44 12 (以下続く) Case1[i行の値よりi+1行の値が大きく、i+1行の値よりi+2行目の値が大きい件数] Case2[i行の値よりi+1行の値が大きく、i+1行の値よりi+2行目の値が大きく、i+2行の値よりi+3行目の値が大きい件数] などの件数を、新たなシートに書き出したいのです。 上の例からすると、 (sheet2) A列  B列(←B列に件数を書き込む) Case1  3 Case2  1 のような感じです。 if文で作ってみたのですが、うまく処理してくれません。 どのようなVBAを書けばいいのでしょうか。 分かる方、よろしくお願いします。

  • このようなVBAを作りたいのですが

    以下のようなデータがあります。 各セルの値は1~100までのランダムな値が入っています。 使用している列はAからFまでです。 例示すると、 A列 B列 C列 D列 E列 F列 1    24   75    69    34    2 55   66   47   28   92   53 13   21   63    32   47   61 44    3    17   81   49   36 以下続く ような形です。 そして、A列に1が200回出てきたら、そこまでのデータを(AからF列まで全てのデータ) を新たなシート1にコピーしたいのです。 この作業を繰り返したいのです。 次回 A列に1が400回出たところまでのデータを新たなシート2にコピー。 次々回 A列に1が600回 出たところまでのデータを新たなシート3にコピー。 {続く} 最終回 1が200の倍数丁度あるとは限らないので、空白になったら、そこまでのデータを新たなシートXにコピー。 といった感じです。 A列に1が何回出てくるかを基準に、データを分割するのが目的です。 言葉不足なので簡易化した例を挙げると、 1が2回出たら…という条件だとします。 A列 →新シート1のA列  新シート2のA列  新シート3のA列  2      2          6           2 1      1          7           1 3      3          1 1      1          8  6                 5 7                 1 1 8 5 1 2 1 のようにデータを分割したいのです。 普段、マクロを使ってデータから数値を取ることはするのですが、ある一定の範囲を新たなシートにコピーといった作業はしたことがないので、どのようなVBAを書けばいいのか見当がつきません。 分かる方、お手数をおかけして申し訳ないのですが、よろしくお願いします。

  • エクセルを文字数固定でテキスト形式に・・・

    エクセル97です。宜しくお願いします。 エクセルにあるデータをtxtに変換させて、別のプログラムに移したいのですが、問題なのが、受ける側で行毎に頭からの文字数で認識して読み込んでいくのですが、そのままテキスト形式で保存すると、各セルには文字数の多い少ないがある為、各行毎にそのカウントしている文字数の場所が違ってきて、読み込みも各行毎に違ってきます。これをそろえる為に各行毎に文字数を固定させて変換できないかと思っているのですが、 そこで・・・ 列毎に、文字列のある列の文字数を決めておいて、その文字数に満たない場合は、その満たない数だけスペースを入れて変換したいのですが・・・すみません、説明がいまいちですが・・・ 例えば・・・ *A列は文字数を6文字と決める。 *そのA列には、文字列が各行のセルに「あいう」「あいうえお」「あい」などの文字列があります。 *テキスト形式に変換されたときに、 ・「あいう」→「あいう___」 ※(_はスペース) ・「あいうえお」→「あいうえお_」 ・「あい」→「あい____」 と変換させたい。 説明もなんだかへたくそで、ちょっと難しいと思いますが、どなたか良い方法を知りませんか?非常に困っています。宜しくお願いします。

  • エクセルVBAについて

    エクセルVBA初心者です。 以下のような処理をしたくて、色々な質問等を見て組み合わせて動かしてみたものの、なかなかうまくいかず困っております。アドバイスいただけないでしょうか? 「Sheet1」に以下のようなデータがあります。 <A列> <B列> <C列> ok59  886 ok88 ok70 777 ok75 okGG 478 ok66 ok97 358 ok58 ok69 764 ok47 ok39 368 ok40 okGG 794 ok68 ok85 463 ok75 ・    ・ ・ ・    ・ ・ A列とC列にはそれぞれ「ok+2桁の数字or文字」が入っています。 B列は特に今回は使わないデータですが、数字が入っています。 やりたいことは以下の通りです。 A列に「GG」を含む文字列(実質okGGしかない状態です)が出てきたとき、 その1つ下の行のA列とC列のセルをピックアップし、背景色をピンク色にします。 上の例だと、A列は「ok97」と「ok85」、B列は「ok58」と「ok75」のセルが該当します。 さらにピンク色にピックアップしたセルのから、頭の「ok」を除いた数字を3.5倍した数字を、 別のシートに抽出したいのです。 なので、上の例を使用した場合の抽出したデータは以下のようになります。 <A列> <B列> 339.5 203 297.5 262.5 ちょっと複雑なのですが、どのようにするのがよいのでしょうか? また、別シートに抽出したいのですが、 「Sheet1」の特定のセルに日付が入っているので、 できればその日付の名前のシートを作り、そこに抽出できたらなぁ・・・と考えています。 「Sheet1」にデータを貼り付けて、ボタンをポンっとおしたら日付の名前のシートができて、 欲しいデータが抽出されていく・・・というイメージです考えています。 どうぞよろしくお願いします。

  • EXCELのデータベース利用について(VBA)

    VBA初心者の者です。 下記の様なEXCELファイルを作りたいのですが、どのようにすれば良いのか まったくわかりません。 ACCESSでの構築が簡単なのかもしれませんが、データ量がそれほど多くないことと 職場にACCESSがないため、可能であればEXCELで構築したいと考えています。 私自身、プログラムの知識がなく、EXCEL VBAのサイトを確認するのですが、いまいち どうすれば良いのかわかりません。 ぜひご教授の程よろしくお願いします。 3つのシートの構成は以下になります。 【入力シート】 A1セルに文字列(A~Z)入力欄 【○○データシート】 A列に A~Z の文字列 B列に 001~100までの数値 C列に 001~100までの数値 D列に 001~100までの数値 E列に 001~100までの数値 例)    A列   B列   C列   D列   E列 1   A   001 2   B   001    002    003   004 3   C   003 4   D   002    003 【▽コマンドシート】 A列に 001~100までの一意の数字 B列に 文字列(コマンド) C列に 文字列(コマンド詳細) 例)    A列    B列    C列 1   001   xx     blank 2   002   xxx△   xxx 3   003   xxxx    x○ 4   004   xxxxx   xxx 【欲しいVBA】 1、入力シートのA1セルに○○データシートのA列に該当するA~Zの 文字列を入力。 2、○○データシートのB列~F列までの数値を参照 3、2の数値において▽コマンドシートのA列に記載ある番号と紐づけを行い、 ▽コマンドシートのB列、C列に記載がある文字列を入力シートのB列、C列にコピー ※コピー時は▽コマンドシートの書式や体裁情報も含めてコピー。 例としては以下になります。 入力シートの A1セルにDを入力した場合は 入力シート    A列    B列    C列 1   D    xxx△  xxx 2        xxxx    x○ 3 以上、ご教授よろしくお願いします。

  • excel vba 検索の方法について

    excel vba 検索の方法について sheet1とsheet2があり sheet1のA列に10列(全て8桁の数字)文字が並んでいます。 sheet2のA列には1000列(全て8桁の数字)文字が並んでいます。 sheet1のA列とsheet2のA列で同じ文字がある場合 sheet2のA列の同じ文字の隣のsheet2のB列に◎がつくような vbaが書きたいです。 A列の文字は消したり、文字を変えたりします。 コマンドボタンに書いて、ボタンを押せば B列に◎がつくようにしたいです。 ご教授お願いします。

  • Excelで任意の文字を含むセルの1つ下のセルを文字カウント

    関数初心者です。 Excelで任意の文字を含むセルの1つ下のセルを文字カウントする、シンプルでスマートな方法はないでしょうか? 具体的には      A列 1行目 @: インデックス1 2行目 この行の文字数をカウント 3行目 <空白行> 4行目 @: インデックス2 5行目 この行の文字数をカウント 上記のようなケースで「@:」を含むセルの1つ下の行(2,5行目の文字数をカウントしたいのです。 現状では、以下のような不細工な方法でやっています: A列の左隣に列を3つ挿入し(オリジナルのA列がD列になります)、C1に「=FIND("@:", D1)」とした上で関数を最終行までコピー→この例では1,3行目に「1」と表示されます 次にB2に「=IF(C1=1,"TRUE","")」と入力し、これを最終行までコピー→この例では2,5行目に「TRUE」と表示されます 最後にB列にオートフィルタをかけ、TRUEの行だけ表示したうえで、A1に「=LEN(A1)」と入力して、これを最終行までコピーしています→これで、2,5行目の文字数がカウントされます こんなヘタクソな方法ではなく、1つの関数で綺麗に同じ結果を得る方法はないでしょうか? もっと勉強すれば、自分でも出来るかもしれませんが、今すぐ必要なのでどうかご教示ください。

専門家に質問してみよう