• 締切済み

VBAのプログラムについて

 VBAでプログラムを書いて以下のようなことを実行したいと考えていますが方法がよくわかりません。   ***1002とセルに入力されているセル列に対して、先頭の文字がaaaであったときに、その後ろの1002を計算して数値に変換するという作業です。  仮に、B列でaaa1002とあった場合に、セルの値がaaaであったときのみ、後ろの1002を100×10^2=10000と計算してB列に対応させてC列に出力したいと考えています。        B列     C列 1行目    aaa1002  10000  2行目 aac1001  空白 3行目 aaa4701  4700  :       :      : 具体的なプログラムのコード、もしくはこのような関数を使えばいいなどヒント等でも構いませんので 教えてください。よろしくお願いします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

挙げた例との関係で、数字部分の割り出し後の計算がよくわからない。説明が十分ですか。 文章で表現してみて。 例 1000の単位に丸めるとか。そうなら1002 がどうして10000なのかな? それか例示データを増やすとか。 ーーー その部分を省いたVBAコードは Sub test01() d = Range("A65536").End(xlUp).Row MsgBox d For i = 1 To d x = Cells(i, "A") If x Like "aaa*" Then MsgBox i & "行にaaaあり" y = Val(Mid(x, 4, Len(x) - 3)) '処理 MsgBox y End If Next i End Sub 納得後はMsgbox行は削除。 処理のところは上記事情で略。 ーー 例データ aaa1002 aac1001 aaa4701 zaaa2345 123aaa aaaaaa12 aaw1234 aaaaaa12のような例があるなら要注意。 IsNumeric(y)を入れたほうが良いかも。 ーー 関数でも出来そう。 >具体的なプログラムのコード、もしくはこのような関数を使えばいいなどヒント等でも構いませんので こういうレベルの人がなぜVBAでやるのか? 質問に、エクセルのバージョンを書くのも習慣づけて。

yasu0915
質問者

お礼

回答ありがとうございます。  1002を10000に直すというのは、部品の品名から抵抗値や容量値を算出するためです。 部品の型名にはどこの会社のどんなシリーズかを示す文字があります(頭の部分)。その文字を判断して抵抗値や容量値を算出したいと考えています。  例えば、aaaから始まれば4文字目に値があって、bbbからなら6文字目からとさまざまです。  数値、アルファベットの並び方はさまざまですが、同じ文字が続くことはありません。     無い例 aaaaaa12   abc47abc  何種類かのパターンごとに算出したいと考え、質問させていただきました。おっしゃる通り、例データはさまざまです。文字数が違っていたり、数値を示す部分は違います。そのため、1条件だけでは判断、算出できず、VBAでできないかと考え、取り組んでいます。  VBAに触れるのは初めてでわからないことだらけです。少しでも知識を得られればと思い、投稿しました。  バージョンは、Microsoft Visial Basic 6.5です。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

C1に、 =IF(LEFT(B1,3)="aaa",MID(B1,4,3)*10^RIGHT(B1,1),"")

yasu0915
質問者

お礼

ありがとうございます。 入力してみます。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

C1に =IF(MID(B1,1,3)="aaa",POWER(MID(B1,4,3),MID(B1,7,1)),"")

yasu0915
質問者

お礼

ありがとうございます。 使用してみます。

関連するQ&A

  • VBAのプログラムに関してです

    VBAに関する質問です。 いま、A列に0~4の数字が順番に繰り返し記入されていて(数字の数はランダム)、B列に適当な値が記入されています。A列の中から1を探しだして(1つ上の行の数字が0)、 その行から1つ戻ったB列の値をC列に記入、A列の次の0~4の繰り返しで同じ条件の1を探してその行から2つ戻ったB列の値をD列に記入する。といったことをA列が空白の行になるまで繰り返し行うというプログラムを教えてほしいです。お願いします。 例) A:00011112233400001123334400011111122233400000- B:12345678912345678912345678912345678912345678- となってるA列のそれぞれの0~4の塊の最初の1をさがしてそれに対応するBをそぜぞれ求めていくというものです。 この場合だと実行結果C・D列には C:379 D:688 となってほしいです。

  • VBA超初心者です。繰り返しのVBAの使い方

    お読みくださいましてありがとうございます。 超初心者のため、くだらない質問をしてしまっていることをお許しください。 現在シート内で、 B2のセルが空白ではなかったら、 MsgBox (("B2")&("B4") &("B7")) c2のセルが空白ではなかったら、 MsgBox (("C2") & ("C4") & ("C7") ) ...... と、IF~Thenを使ってFの列まで続けて書いています。 これを、空白の列になるまで繰り返すようなプログラムに書き換えることは可能でしょうか。 繰り返しのVBAを使ったことがありません。 どなたか教えていただける方、ご回答をお願いいたします。 End Sub

  • "VBAの繰り返し"についてお尋ねします。VBA初心者です。

    "VBAの繰り返し"についてお尋ねします。VBA初心者です。 例えば「A列の最後のセルに何か入れば、その行のB列、C列・・・の一つ上のセルに入っている計算式を繰り返しコピーする」と言うコードを教えていただけたらと思います。A列の最後のセルに何か入ってくれば、その行の一つ上のセルに入っている計算式を繰り返しコピーするというコードです。コード記述の例を教えていただけたらと思います。よろしくお願いします。

  • VBAで行範囲を抽出して隣のセルに貼り付ける

    Excel VBA初心者です。 A列にある以下のデータの「aaa」から「bbb」の範囲を検索して 切り取り、隣のセル(B列)に貼り付けるマクロを教えてください。 実際のデータは「aaa」から「bbb」の範囲のデータが500個くらい あるので、隣のセルに貼り付けていく作業をマクロで処理したいと 考えています。 ・マクロ処理前 列A aaa data0 data1 data2 bbb datax ------------ aaa data3 data4 data5 bbb datay ------------ aaa data6 data7 data8 bbb dataz ・マクロ処理後 (処理前のdatax、datay、datazは列Aに残ったままで構いません) 列A  列B   列C    列D 空白  aaa   aaa   aaa 空白  data0   data3   data6 空白  data1   data4  data7 空白  data2   data5  data8 空白  bbb   bbb  bbb

  • Excel VBAによる検索処理?

    Excelで以下の例のように、A列・B列に入力されているとします。A列を検索して、C列にB列の値を返す式を考えてますが、さっぱりわかりません。VBAとかも正直素人ですが、サンプルもしくは考え方を教えていただければと思います。以下の処理内容です。 ・AXセルが「B」であった場合、次のセル(A(X+1))を検索し、次が空白になるまで検索し、空白になる前の最後の行のB列の値をCXセルに返す。該当しない場合は空白のまま 下記の例ですと3行目、8行目のB列の値を2・3、6-8行目のC列のセルに返すことになります。よろしくお願いいたします。 (処理前) ___A__B__C ------------- 1 2__B__2 3__B__3 4______4 5______5 6__B__6 7__B__7 8__B__8 9______9 (処理後) ___A__B__C ------------- 1 2__B__2__3 3__B__3__3 4______4 5______5 6__B__6__8 7__B__7__8 8__B__8__8 9______9

  • エクセル2003のVBAを教えて

    エクセル2003のVBAを教えてください。 次の対象データで、(1)(2)(3)の作業が出来るエクセルVBAを教えて下さい。 (1)(2)(3)個々のVBAでお願いします。 ●対象データ:種類(A列)、文字(B列)、    データの行数:不特定なので、データのある最終行までとします。 ●教えていただきたい項目  (1):種類だけを(C列)に取り出す。  (2):種類の先頭に空白の行を3行入れて、追加の2行目の種類(A列)に文字(B列)を入れる。  (3):種類が5行以上あるときは、5行ごとに空白行を追加する。 ●対象データ 種類(A列)   文字(B列) AA       あああ BB       いいい BB       いい BB       いいい CC       うう CC       うう DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ ●(1)のVBAの結果(このようになるVBAを教えてください。) (C列) AA BB CC DD ●(2)、(3)のVBAの結果(このようになるVBAを教えてください。) 種類(A列)    文字(B列) あああ AA        あああ いいい BB        いいい BB        いいい BB        いいい うう CC        うう CC        うう ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ

  • 抽出して並べ替えたい

    初めまして 非常に悩んでいます。 エクセルシートの列に下記のようにデータが並んでいます。(文字列) AAA bbb ccc (空白) BBB ddd eee (空白) AAA bbb ccc (空白) AAA eee ggg 並べ替え後 AAA AAA BBB bbb eee ddd ccc ggg eee 尚、列上でセル位置は任意で、空白行も任意です。(1つ以上です) できれば関数でお願いします。 VBAの場合、使用したことがないので詳しくお願いします。

  • エクセル マクロ VBA

    エクセルのマクロについて質問です。 『集計』というブックの『集計開始』というシートに     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 コメント  空白     空白   3行目 空白   空白     空白 4行目 商品名  支店     個数  5行目 空白   空白     空白 6行目 空白   空白   コメント1 7行目 空白   空白     空白 8行目 空白   空白   コメント2 9行目以降    上記のデータ(見出しを除く)の繰り返し というデータが入っています。 B列の中に『AAA』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 C列の中に『B』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 (今は、手作業で編集→置換→検索する文字列の中に『B*』と入力し、 置換後の文字列を空白にしてすべて置換ということをやっています。)                            ABC列(データーの入っている行まで)の空白を含む行を一括削除し、 以下のような形にしたいのです。     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 商品名  支店     個数  3行目 商品名  支店     個数          ・         ・ このようにするマクロ文はどのようになりますでしょうか?

  • エクセルVBA 配列の書き方とセルへの一括表示方法

    エクセルのVBAで 下記のようなプログラムを作成しています。 1行目はタイトル行で E列が空白になるまで、 各行のE列~H列の値を変数に入れて、 最後に一括で別の列・行にそれぞれの値を表示・書込したいと思ってますが、 どうもVBAは初めてでよくわかりません。 Dim aaa As String Dim bbb As String Dim ccc As String Dim eee As Double intRow = 2 Do Until Cells(intRow, 5).Value = "" aaa = Cells(intRow, 5).Value) bbb = Cells(intRow, 6).Value) ccc = Cells(intRow, 7).Value) ddd = Cells(intRow, 8).Value) intRow = intRow + 1 Loop aaaの各変数を2行目のA1~intRowまで bbbの各変数を2行目のB1~intRowまで cccの各変数を2行目のC1~intRowまで dddの各変数を2行目のD1~intRowまで セルに一括して表示したいのです。 配列の書き方と、セルの範囲に表示・書込する方法を どうかご教示下さい。お願いいたします。

  • エクセルVBAで質問です。

    エクセルVBAで質問です。 A列   B列 AAAA  1111 BBBB  2222 CCCC  3333 とあります。 上記を AAAA (空白) (空白) 1111 (空白) BBBB (空白) (空白) 2222 (空白) CCCC (空白) (空白) 3333 (空白) A列にB列を挿入し、2・3・5行目に空白のセルを入れていきたいのです。 9000行ぐらいあります。 他の列に A列、B列のものを取得していく形でも構いません。 とにかく、縦1列に並べたいです。 どなたか、ご教授お願い致します。

専門家に質問してみよう