エクセル2003です。VBAは初心者です。

ある列(Aとして)にデータがあって、A列をキーに昇順に並べ替えます。(1行目が見出し。)

その後、2行目の値を基準値として、
ループで3行目から4行目、5行目…と順に値を見ていき基準値と比較して、
値が異なったら基準値でフィルタをかけて印刷し、
現在の値を新たな基準値として次のループを行う、
という処理を行っていました。

上記の時は数字4文字(0001、0100等)という前提だった為、空白や4文字の数字以外は
事前にチェックしてエラーメッセージを出していたのですが、
新たに「01」や「00001」も「0001」と同じ値として扱うことにしました。

この場合オートフィルタで「01」や「00001」と「0001」を同時に抽出する事は可能でしょうか?

また無理な場合、どのような処理にすればよろしいでしょうか?


今の所、2つの値の文字数を取得(Len関数)し、
RIGHT関数で1文字取得。

1文字を比較して異なれば別とみなし印刷、
同じなら次はRIGHTで2文字取得して2文字を比較…
これを少ない方の文字数分行う。

その後、文字数が多い方の文字列からLEFT関数で差分の文字数分取得し、
オールゼロなら同じとみなし、オールゼロでなければ別とみなす…。

という様な処理を作っている途中なのですが、

まずCOBOLのように、不特定な文字数の文字列に対して「ALLZERO」かどうかを見る
方法はあるでしょうか?

また、処理が長引いているような気もするのですが、
これ以外に有効な方法はあるでしょうか?

教えていただけると助かります。
よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

文章で表現することも必要だが、実例を挙げて説明すべきだ。


何のことか判りにくい。無駄な記述も多いので焦点がぼやけているのでは。
>2行目の値を基準値として、ループで3行目から4行目、5行目…と順に値を見ていき基準値と比較して、値が異なったら基準値でフィルタをかけて印刷し、現在の値を新たな基準値として次のループを行う、という処理を行っていました。
など本質問に、書く必要があるのか。過去にやっていたというだけで本質問に直接関係がない場合は、質問の中に書かないこと。
ーーー
>VBAで「1」、「01」等を同じ数字とみなすには
これをしたいなら、「セルの値」として、別の(同行別列)セルに統一したデータをつくるべきなだけ。
Format関数などで文字列に統一するか、VALで数値に統一すれば仕舞いではないか。なぜ質問が出るのか
ーー
上記で「別のセルに」といった理由は、
それとエクセルを使うものとして、根本的なことがわかっていない。VBAの初心者だとしても、エクセルも良くわかってない。
エクセルは、「セルの値」の「学」(まなび)である場合が多いのだ。「セルの値」に対比するものは「表示形式適用後の見た目」だ。
ソートやフィルタは、セルに「実現している値」を元に処理するようになっているのだ。
VBAで言えば、Rangeオブジェクトに対するメソッドになっているのがそれを意味する。
セルなどを前提にしないVBプログラムでは、プログラムの中で修正キーをつくり、その値に基づいてソートなどの処理をするのは自由だ。
それでもソートについては、一旦配列などに修正キーを「全」レコード分作らねばならない場合が多い。
またレコード処理で出来る課題で、1レコード内で修正した値を変数に作成し、其れで処理できる場合はあろう。(前後関係・全体関係を問題にしないで良い場合)
しかしソートなどは、プログラムの中の変数に、修正データを作るだけでなく、セルの「値」として実現せ(作ら)ねばならない(表示形式の見た目の結果ではダメということも意味する)。ソートなどの場合はそれも各行セルに対応して、全行のデータがセル範囲(普通同一列データ)に作成されて居ないとダメ。
フィルタの場合もFilterメソッドを使うなら、前もってセルの「値」として実現せ(作ら)ねばならないのだ。
ルール(例「1」、「01」等を同じ数字とみなすには)適用後のデータがシートに必要ということ。
1レコードづつ  該当かどうか判別していくなら、変数にプログラムで修正データを作って、そちらで考えればしまい。
ーー
すなわちエクセルでは
プログラムで、1レコード分の変数に修正値を作る+エクセルのRangeオブジェクトのメソッドなどに頼って、修正後変数値を使って処理はできない。
これらは「単独」レコード(行)を処理するのでなく、セル範囲で考えざるを得ないもの(ソート)や、セル範囲のデータ全部に
一遍に、同じルールを適用する(フィルタ)ものが多い。
これがあるお蔭でVBAコード1行でソートが済んでしまうのでありがたいわけ。フィルタも同じ。
例外に見えるソートのオプション特にユーザー指定(例日・月・火・・順)の並べ替えなどがあると、いうかもしれないが、それらはマイクロソフトが別途、問題を引き取って、作業列などを作り、処理しているわけで、我々ユーザーには、舞台裏側は見せてないだけ。
===
総括すると
基本的にはエクセルでは空き列に、修正データを作って、そのシートデータにの新設列のデータに対して処理することを基本と心得ること。
本質問では修正データを作るコードは簡単なものだ。それをメインテーマに質問をしてないだけ。
それでは無駄をかんじて、もっと無駄を省けないか、などは、相当エクセルも習熟し、VBAに熟達してからゆっくり考えること。
多分無いと思うが。
    • good
    • 0
この回答へのお礼

確かにまだエクセルを理解できていないですね。
勉強します。

ありがとうございます。

お礼日時:2011/04/17 22:27

やりたいことが、よくわからないのですが、


>新たに「01」や「00001」も「0001」と同じ値として扱うことにしました。
これは、先頭の0は無視するという意味ですか?
コンピュータの問題を解くとき、このように例をあげて考えてはいけません。
どういうルールなのか、一般規則を見つけることが、問題解決の第1歩です。

前に書いたとおり、先頭の0を無視するのでよいなら、
・数字しか出てこないのなら、Val関数で、数値化してから比較する。
・数字以外の文字もありえるなら、Mid関数で左から順に1文字ずつ調べ、0以外の文字が出たところで、それより右の文字だけ取り出して(Mid関数は取り出す文字数を十分大きくしておくと、それより右の文字を取り出すことができる) 比較する。
のどちらかとすればよいでしょう。
    • good
    • 0
この回答へのお礼

すいません説明不足でした。

現在は数字以外の文字も含み、表示形式も標準以外を考慮しなければならない
状態で作成しています。

一般規則を見つけることですね…
ありがとうございます。

お礼日時:2011/04/17 22:25

>不特定な文字数の文字列に対して「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を使ってみる手もあります。マクロ以前に「フィルタオプションの設定」のエクセルの機能について習熟しておく必要があります。
    • good
    • 0
この回答へのお礼

勉強不足でした。

助かりました、ありがとうございます。

お礼日時:2011/04/17 22:22

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q数字の書き方

数字の書き方(1・4・5・6・7)について質問します。
添付した紙の左側に書いてある数字は、印刷物で見かける数字です。
添付した紙の右側に書いてある数字は、私が普段書く数字の書き方です。

印刷物で見かける数字と私が普段書く数字の書き方では、形がちょっと違います。書類に数字を書く時、
私が普段書く数字の書き方で書いた方がよいですか?

私が普段書く数字の書き方(1・4・5・6・7)は、正しく書けてますか?

細かい質問になりますが、宜しくお願いします。



                

Aベストアンサー

数字は実用的な目的で書かれると仮定します。つまり芸術ではなく、美を追求するものではないとします。そうすると誤解のない字であることが最大の条件になります。そのほかに早くかけるとか、親しめる文字であるとか、いくつかの付帯的な問題はありますが、この際それは無視しましょう。
 そういう条件で見ると質問者の数字は誤解される恐れはなく、「正しくかけている」といえます。
 書類に数字を書く時、
>私が普段書く数字の書き方で書いた方がよいですか?
これは何を聞きたいのか、わかりません。
 もっと左の字に似せたほうがよいかという質問ですか。それなら、その必要はないといえます。
 それとも個性の感じられる字の方が良いかということですか。別に取り立てて特徴があるとも見えないので、その場合もノーです。

QEXCEL2000で「01,02」や「03,05」と入ったセルを「1,2」や「3,5」のように数字の前の0を消したい。

過去の質問も調べてみましたが、見当たりませんでしたので質問させてください。

エクセルのデータで、セル内に「01,02,04,06」や「02,08,10」と
いったような数字が入っていますが、
実際には数字の前の0(ゼロ)が不要で、最終的には「1,2,4,6」や
「2,8,10」のようにしたいのですが、やり方がわかりません。

どなたか方法がお分かりになる方がいらっしゃいましたら、
どうぞ教えてください。
よろしくお願いします。

Aベストアンサー

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"0","",1),",0",","),",,",",0,")

解説(最後の部分が必要ないなら数式から外してください。)
SUBSTITUTE(A1,"0","",1) => 先頭の0のみを消します
「01,02,04,0,06」=>「1,02,04,0,06」
SUBSTITUTE(上記の結果,",0",",") =>後続の,の後の0を消します
「1,02,04,0,06」=>「1,2,4,,6」
SUBSTITUTE(上記の結果,",,",",0,") =>内容が,0,の場合の誤消去を戻します。
「1,2,4,,6」=>「1,2,4,0,6」

Q正式な数字の書き方

普通の数字(アラビア数字?)には、正式な書き方があったとおもうのですが、
それらをまとめたようなサイトはないでしょうか?

正式な書き方とは、3本か4本の線上に数字を書く書き方です。
説明が下手ですみません。よろしくお願いします。

Aベストアンサー

No.2です。
数字が上下に出入りするスタイルは"non-lining figures" というらしいですね。
これは小文字と一緒に使うもので、大文字と混ぜるときはベースラインをそろえるのだと説明がありました。
http://typo.lomo.jp/typo_13.html
http://www.fontsite.com/Pages/RulesOfType/ROT1297.html
http://www.emigre.com/EFoGC.php
http://www.usgennet.org/family/smoot/oldhand/romannumerals.html

質問の意味自体わかっていないので、「それのことだ」とか、「そんなのじゃない」とか、補足をください。

参考URL:http://www.fontsite.com/Pages/RulesOfType/ROT1297.html

QVBA 人の目には同じ数字に見えるのに、VBAは違う数字として判定してしまう

あるセルに1826.97792という数字が入力されており、
別のセルにも1826.97792と同じ数字が入力されています。

人間の目で見る限りまったく同じ数字です。
また、エクセル関数=if(・・・・・)で判定しても同じ数字という判定がでます。

しかしながら、VBAにて
if セル1=セル2 then
などとして比較すると、同じでないという判定結果になります。

どうしてこういうことが起きるのでしょうか?
また、プログラムを書くうえでの対処方法はどうすればいいのでしょうか?

ちなみに、数字は他の人が作ったファイルのもので、
改めて、手で入力しなおすと正しく判定されます。

Aベストアンサー

こんばんは。

この前、同様の内容の質問が出ていました。

>if セル1=セル2 then
>などとして比較すると、同じでないという判定結果になります。

おっしゃるとおり、そのままでは比較できません。

>1826.97792という数字が入力されており、別のセルにも1826.97792と同じ数字が入力されています。

これは、Double型です。Double型で、小数点が入っているので、無限小数が含まれていたりする可能性が高く、同じ数だと思っても違ってしまいます。(そのまま入力しても、入ることがあります)

その対処法は、
例えば、

Dim a As Double
Dim b As Long
Dim c As Double
Dim d As Long

 a = Cells(1,1).Value
 b = CLng(Fix(a * 100000))

 c = Cells(1,2).Value
 d = CLng(Fix(c * 100000))

というような、 方法で、一旦、小数点を固定してあげないと、比較できません。
なお、日付や時間値の場合は、Format$ 関数で、一旦、文字にして日時で比較する方法もあります。

こんばんは。

この前、同様の内容の質問が出ていました。

>if セル1=セル2 then
>などとして比較すると、同じでないという判定結果になります。

おっしゃるとおり、そのままでは比較できません。

>1826.97792という数字が入力されており、別のセルにも1826.97792と同じ数字が入力されています。

これは、Double型です。Double型で、小数点が入っているので、無限小数が含まれていたりする可能性が高く、同じ数だと思っても違ってしまいます。(そのまま入力しても、入ることがあります)

...続きを読む

Q外国語で数字の「0(ゼロ)」の書き方と読み方を教えて下さい。

どこの国の言葉でもいいのですが、外国語で数字の「0(ゼロ)」の書き方と読み方を教えて下さい。いろんな種類の「0(ゼロ)」を探しております。宜しくお願い致します。

Aベストアンサー

書き方というと、文字の形のことでしょうか?
…多分違いますね。でも一応書いておきます。

ゼロは大抵の言語で「○」型をしていますね。
例外的にアラビア語では「・」で表します。
また、マラヤーラム語という言語のゼロはσが右に伸びたような形をしているようです。
あとは「零」。

読み方では、大抵ヌル系かゼロ系です。
ロシア語でноль[ノリ], нуль[ヌリ]
フランス語でZe´ro[ゼロ]
他には
ギリシャ語でΜηδε´ν[メーぜン](←"ぜ"は英語のth)
韓国語で零[ヨン(yeong)]
中国語で零[リン(ling)]
など。

参考URL左下の「他の言語」から各国のゼロの表記が分かります。
発音は分かりませんがローマ字なら大体想像がつくでしょう。

参考URL:http://ja.wikipedia.org/wiki/0

Q一桁数字を「01」「02」のように変換したい

一桁数字を「01」「02」のように変換したい

MP3ファイルの曲目で現在は下のようになってます。
(ファイル名兼ID3タグ)

1.Come Together.mp3
2.Something.mp3
------中間省略------
10.Sun King.mp3
11.Mean Mr. Mustard.mp3
12.Polythene Pam.mp3
13.She Came in Through the Bathroom Window.mp3
------以下省略------

これを
01.Come Together.mp3
02.Something.mp3
------中間省略------
10.Sun King.mp3
11.Mean Mr. Mustard.mp3
12.Polythene Pam.mp3
13.She Came in Through the Bathroom Window.mp3
------以下省略------

と一桁の先頭に「0」を追加したと考えています。

1.先頭の「1」を「01」に変換する事は可能ですか?
2.先頭の数字から「.」(ピリオド)まで抜く方法はありますか?
3.最適な方法はありますか?


環境
Windows2000sp3
エクセル2000
ID3タグ編集はフリーソフトの「SuperTagEditor」を使っています。

エクセルを使う方法が多いのかと思いこのカテゴリに質問致します。

よろしくお願い致します。

一桁数字を「01」「02」のように変換したい

MP3ファイルの曲目で現在は下のようになってます。
(ファイル名兼ID3タグ)

1.Come Together.mp3
2.Something.mp3
------中間省略------
10.Sun King.mp3
11.Mean Mr. Mustard.mp3
12.Polythene Pam.mp3
13.She Came in Through the Bathroom Window.mp3
------以下省略------

これを
01.Come Together.mp3
02.Something.mp3
------中間省略------
10.Sun King.mp3
11.Mean Mr. Mustard.mp3
12.Polythene Pam.mp3
13.She Came in Through the ...続きを読む

Aベストアンサー

こんにちは

MP3のことはよくわからないんですが、エクセルでA列に曲目が並んでいるのであれば、下記関数で実現可能です。

=IF(FIND(".",A1)<3,"0"&A1,A1)

FINDで"."までの文字数をカウントして、一桁だと0を追加しています。

Q調剤薬局事務に適した数字の書き方とは

 調剤薬局で働くため調剤薬局事務の資格を取るつもりです。
しかし、最近、知人に調剤薬局で働くためには、資格より調剤薬局で働くのに適した文字があると聞きました。具体的には簿記の資格を持っておられる方、経理の仕事をされている方の様な数字の書き方が必要だと。初めて聞きました。私は決して上手な字を書くとは言えません。その分、丁寧な字を書く事を心がけてはおりますが・・・そこで質問です。やはり調剤薬局事務の仕事をするためには、簿記の資格を持っておられる方、経理の仕事をされている方の様な数字の書き方が必要なのでしょうか。また、その書き方とはどの様なものなのでしょうか。お教え頂ければ幸いです。よろしくお願いします。 

Aベストアンサー

医療系の仕事をしています。
が、そんな話は聞いたことはありません。
ただ、経理などには文字のかきかたはありましたけど・・・・

自分が思うに、きちんとだれでも読める字ならありではないかと思います。
私も自慢できるような字ではないですけど、メモなど残すときはちゃんと
識別できるような文字を書くように心がけています。
それでいいと思いますよ。
調剤など医療系は命にかかわることですし、同じようなお薬はたくさんあります。
その読みを間違えただけで・・・ぞっとしますね。
それがなければいいのではと思いますよ。
レセプトなどはシステムがするので書くことはまずないし…。

Qエクセル2000:見た目「1:01」を文字列「1:01」に変換したい

お世話になります。
A1に「1:01」というデータがあり、シリアル値は「0.0423611111111111」という具合です。それをA2にTEXT関数を使うなどの方法で、見た目とおり、文字列で「1:01」と変えたいのです。よろしくご指導お願いいたします。

Aベストアンサー

=TEXT(A1,"h:mm")
で文字列化できるかと

Q数字の書き方色々

7に横棒を入れたり、4の横棒をつきださなかったり、9を反対に書いたり、国によって数字の書き方が違いますね。

それらの一覧できるサイトはないでしょうか。

自分で探したのですが、うまく見つかりません。

情報よろしくお願いします。

Aベストアンサー

国によって数字(1234567890)の書き方が『違う』ことはありません。全世界共通です。

実際に手書きで、「7」に横棒を入れるのは、「1」との区別がその人の筆跡(というよりも「クセ」)で混同し易いので、横棒を入れているものです。私の実体験では、フランス人は「1」を、左上部分を大きく(長く)書く傾向にあり、一般日本人の目では「7」のようにも見えます。同国人でも多分同様で、誰かが横棒を入れることを思いつき、これが一般化したものでしょう。しかし横棒つきの「7」は、あくまでも便宜的な区別で『正しい』字ではありません。日本人でもそのように書く人が(まれですが)います。

「z」の中央にヽを付けるケースも少なくないようですが、これは「2」と区別するためです。

手書きでは一般化していませんが、「0」(ゼロ)と「O」(大文字のオー)を区別するために、前者に斜線を加えるのも同ケースでしょう。ただ(私の知る範囲で)「1」と「l」(小文字のエル)を区別する便宜的方法は、日本でも欧米でも無いようです。

古い欧文タイプライターでは、「1」キーが存在せず、小文字のエルや大文字のアイに代えるのが普通でした。「0」も同様です。もちろんその当時、斜線入りの「0」は存在していませんでした。

「9」の反対、というのは目にした体験がありません。ただ、欧米人は「8」を日本人のようにひと筆で書かず、マル2つで書く人が少なくありません。時として上のマルとしたのマルが離れてしまって、それこそ目をマルくします。ことによると、マルを書いて、その下に棒を引いて「9」にしているので、そのように見えるのかもしれません。

国によって数字(1234567890)の書き方が『違う』ことはありません。全世界共通です。

実際に手書きで、「7」に横棒を入れるのは、「1」との区別がその人の筆跡(というよりも「クセ」)で混同し易いので、横棒を入れているものです。私の実体験では、フランス人は「1」を、左上部分を大きく(長く)書く傾向にあり、一般日本人の目では「7」のようにも見えます。同国人でも多分同様で、誰かが横棒を入れることを思いつき、これが一般化したものでしょう。しかし横棒つきの「7」は、あくまでも便宜的な区別で『...続きを読む

QExcel2003 セルの書式で通貨「$」を選択すると、数字の前に「$¥」がつきます。

こんにちは。お世話になります。教えてください。
知人のパソコンで発生しており、何かの設定で治るのかエクセルの何かが破損したのか分らず困っています。。

WinXpSP2 Excel2003SP2 です。
セルに数字を入力します。たとえば「100」とします。
入力時は「100」と表示されています。
そのセルを選択して、書式>表示形式で「通貨」を選択、記号に「$」を選択します。その時点でサンプルの表示は「$\100」となります。
そのままOKを選択するとサンプル表示のままセルに表示されます。

一度、そのセルに対して、編集>クリア>書式 としてからもう一度、通貨の設定をしてみたのですが、結果は同じでした。
ただ、これは「$」を選択した時だけ起きるようで、ユーロなど選択しても「\」はでてきません。
新規ブックでも同じです。

「$」と数字だけで表示させたいのです。どうしたらいいでしょうか?なにとぞよろしくお願いします。

Aベストアンサー

http://support.microsoft.com/kb/943676/ja


人気Q&Aランキング

おすすめ情報