• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで「1」、「01」等を同じ数字とみなすには?)

VBAで数字の一致判定方法と処理の効率化について

keithinの回答

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

>不特定な文字数の文字列に対して「ALLZERO」かどうか そういう手順を組んでしまうなり,関数を作成してしまえばどうとでもなります。 例: dim buf as string buf = "0000" if application.substitute(buf, "0", "") = "" then msgbox "buf is all zero" end if >他の手 val関数で数値化してしまう手もあります。 例: dim buf as string buf = "0010" msgbox val(buf) ワークシート上で数式によって数字の文字列を数値化してしまい,そちらでフィルタをかける手もあります。 例: A列にそういった文字列が記入されている D列でそれらを数値化する range("D2:D" & range("A65536").end(xlup).row).formula = "=A2+0" range("D:D").autofilter field:=1, criteria1:="=1" オートフィルタの代わりにadvancedfilterを使ってみる手もあります。マクロ以前に「フィルタオプションの設定」のエクセルの機能について習熟しておく必要があります。

ckool20
質問者

お礼

勉強不足でした。 助かりました、ありがとうございます。

関連するQ&A

  • excel使用 該当する数字の積を求めたいのですが・・・

    例えば、 Tanaka 3 Inoue 4 Kato 2 Inoue 2 Okuda 8 Inoue 7 Kato 2 など、文字列とそれと同じ行に数字が並んでいる場合、 同じ文字列のものどうしの積を関数で求めたいのですが、やり方が思いつきません。 (例えば上の例だと、「Inoue」の持つ数字として、4*2*7=56、と出したい) 何かいい方法はないでしょうか? (補足ですが、当方の扱おうとしている文字列の種類は非常に多いため、 「特定の文字列ごとにフィルタにかけて、数字の積を求める」 というやり方はNGでお願いします)

  • VBA もし、数字が同じだったら

    VBAで、もし D1とE1が同じ値(数字)だったら・・・ 行ごと削除という式を作りたいのですが Rangeを使うとエラーが出ます。 今のところD1とE1が同じなら・・・ D2とE2が同じなら・・・というように行は変数にしたいと 思っています。 どんな関数を使って式を組めばいいのでしょうか。

  • VBAでの全角数字と半角数字の判断について

    はじめまして、こんにちは。VBAのプログラムについて教えて欲しいのですが、「ぐう1」のように文字列の一番後ろの数字を削除するプログラムを作成したいです。asc関数を利用して str="ぐう1234" StrLenNum = Len(str) If Asc(Right(str, 1)) >= 48 And Asc(Right(str, 1)) <= 57 Then str = Left(str, StrLenNum - 1) としたのですが、これでは 「ぐう1」という全角数字に対応することができませんでした。 全角文字に対応するにはどうすればよいでしょうか? よろしくお願いします。

  • Excel フィルタした値をセルに表示する関数

    図のような表をつくり、表にはテーブル書式を設定しています。 B列で社名でフィルターをかけると、C列、D列の数値の集計は、SUBTOTAL関数(109)で行っており、フィルターをかけた最終行にその集計数値が表示されます(下部画像のようになる)。 ついでに、B列の最終行に、フィルターをかけた値(ここでは文字列の"あいう会社")を表示させたいのですが、どの関数を使えばよいのかわかりません。 フィルターに使った文字列を抽出する関数、 あるいはフィルタした値は常にB列の上から2行目にくるので、 これを参照してB列の最終行のセルに表示させる方法 はあるでしょうか?

  • どう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を書けばいいのでしょうか。 分かる方、よろしくお願いします。

  • Excel VBAで・・・

    こんにちわ。VBA初心者ですが、よろしくお願いします。 下記のような表からの値の取得(値の走査)の処理を考えているのですが、どうも1つ1つのセルを比較して取得するやり方しか考えつかなくて、マクロの実行時間が長くなってしまいます。。。 A列  B列   C列   D列 関東 千葉県 千葉市 中央区 関東 東京都       渋谷区 関東       横浜市 東北 福島県 福島市 関西             伏見区 北陸       新潟市 (A列にはエリア、B列には県、C列には市、D列には区が設定されてます。) 入力値がB,C,D列に全て一致した行のA列を返却させたいと思っています。 例えば、神奈川県横浜市港北区と入力した場合、関東を返して欲しいです。 ただし、空白のセルの箇所は見ない(何でも構わない)ため、 東京都新潟市中央区と入力した場合は北陸を返して欲しいのです。 私が思いつくのは、県を比較して、一致or空白なら次の列(市の比較)へ行き、不一致なら次の行で同じ処理を行うやり方しか思いつきません・・・ 1つ1つの比較以外に何かやり方はございますでしょうか? ExcelのFind関数などの利用も考えたのですが、空白の場合にうまく動かないので。。。 宜しければアドバイスをお願いします。

  • VBAの関して

    エクセルの1行目に特定の文字列を含んでいる場合、その列を削除したいのですが、列の削除がうまくいきません。 10列目まで処理をしたい場合、、単純にforループでiを1から10までまわし、特定の文字を含んでいなければ Columns(i).Select Selection.Delete Shift:=xlToLeft では駄目なのでしょうか? どなたか助言お願います。

  • EXCELで文字を数字に変換したい

    お世話になります。 エクセルシート上の見た目数字、実は文字列という値を、数字に変換したいのですが、EXCEL-VBAでどのように処理すればいいのでしょうか? 1.セルから文字列型の見た目数字の値をとってくる。 2.VBAで文字列型から整数型に変換する。 3.元のセルに貼り付ける。 4.セル書式を数字のカンマ形式にする。 リンクではなくこのような処理をしたいのですが、どうすればいいのでしょうか?

  • 文字列を返すVCで作成したDLL関数をVBで呼ぶと...

    VC++で文字列を返すDLL関数を作成しました。 LPCSTR GetVcString(void) これをVBでStringとして受け取り、MsgBoxで表示すると正常に取得できているようなのですが、Lenで文字数を取得すると変な値が返ってきます。 1. Dim Ret As String 2. Ret=GetVcString() 3. MsgBox(Ret) ← VCで返された文字列は正常に表示されている 4. MsgBox(Str(Len(Ret))) ← 実際の文字数とはかけ離れた数値になる 2行目と3行目の間に、 Ret=Left(Ret,InStr(Ret,vbNullChar)-1) を噛ませれば文字数は正常な値になるのですが、このような処理をしなくても正常に文字数を取得する方法があれば教えてください。

  • 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 となってほしいです。