• ベストアンサー

文字列と複数の数を含む複数のセルから最大値を抽出

マクロを自動記録して多少いじる程度のVB初心者です。 題の通りなのですが、以下のような書式から、ある数値だけを取り出したいのです。 (取り出したい数値):(ユーザー名):(日時) (ユーザーのコメント) 取り出したい数値、ユーザー名、日時は一つのセルに入っており、 ユーザー名のある行とコメントのある行は別です。 コメントは数行に及ぶ場合もあります。 取り出したい値は整数で桁は変わります。 具体例↓ 3859 :高橋5000:2010/12/25(日) 00:33:50 3000円くらいですかね こういった書式が、ある列に1~20個並んでいます。 この中から(取り出したい数値)が最も大きいセルの、 (取り出したい数値)だけを取り出し、 特定のセルに貼り付けたいのですが可能でしょうか? やたらと局所的で申し訳ないのですがご教授願います。

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

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

関数でもやって出来ないことは無さそうですが,マクロで行いたいならその方が素直で簡単は簡単です。 「対象になる行」と「コメント行」の識別がイマイチ曖昧ですが,適宜応用してみてください。 sub macro1()  dim h as range  dim res as long  for each h in range("A1:A" & range("A65536").end(xlup).row)  if instr(strconv(h.value,vbnarrow), ":") > 0 then   res = application.max(res, val(split(strconv(h.value, vbnarrow), ":")(0)))  end if  next  msgbox res end sub

hijiriki
質問者

お礼

いまいち意味が解ってない所もありますが出来ました! ありがとうございます! コメントに「:」が入ってるとマズイので 検出条件を「:20」にして使ってみます。88年使えれば十分です。

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

その他の回答 (1)

回答No.1

置換・区切り・オートフィルタでいけそうですね。 ポイントは「区切り」の活用です。元々は、苗字と名前がスペース等で区切られているものを 別々のセルに分割するときに使う機能です。 例: 「教えて goo」 → スペースで「区切り」を適用 →「教えて」と「goo」に分割 自分のExcel2003での手順としては、 1:置換(Ctrl+H)でコロンをスペースに スペースじゃなくても「区切り」適用されるならなんでも。 2:データ→区切り位置 でスペースで区切る 3:セルが分割されるので、先頭行に適当なタイトルを入れてオートフィルタ適用 こんな感じでどうでしょう?

hijiriki
質問者

お礼

素早い回答ありがとうございます! データの区切りは以前使用していたのですが、 コメントやユーザー名が長いせいもあり、 セルの幅が歪んでしまって後始末が大変だったのです。 ですが、回答してくださったこと非常に嬉しく思います。 重ねてありがとうございました。

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

関連するQ&A

  • セルの書式が標準なのに文字列にできるのはなぜ?

    会社のシステムで吐き出したデータですが セルの書式設定が標準なのに文字列となっています。 マクロを利用して、あるセルの値を別セルへ転記すると、 数字は数値に変換され、先頭の0は消え、桁数が多いと指数表示になってしまいます。 会社のシステムが吐き出したエクセルはセルの書式が標準なのに 中の数字が文字列でいられるのが疑問です。 会社のシステムの吐き出したデータは Microsoft Excel 2.1ワークシートで 全てのセルの書式設定は「標準」です。 で例えば 12345678901234 は 12345678901234 と表示されていて 「数値が文字列として保存されています」 となっています。(先頭に ' は入っていません) 0101という値のセルでも 表示は0101ですが 「数値が文字列として保存されています」 となっています。(先頭に ' は入っていません) それらのセルの値をマクロとかで別セルに転記すると 転記先では1.23457E+13 と表示されてしまいます。 (0101は101になります。) まっさらなエクセルに自分で手入力すると ・セルの書式設定が標準だと 12345678901234 ↓ 1.23457E+13になります。 ・セルの書式設定が数値だと 12345678901234 ↓ 12345678901234 ・セルの書式設定が文字列だと 12345678901234 ↓ 12345678901234 (ただし 数値が文字列と保存されています と注釈有) なのに会社のシステムの吐き出しデータは セルの書式設定が標準なのにもかかわらず 12345678901234 ↓ 12345678901234 (ただし 数値が文字列と保存されています と注釈有) となっています。 手入力で書式設定が標準の状態でセルに12345678901234 と表示させるには先頭に ' をつける方法しか知りませんが ' が無いのに表示されています。 でもこの該当セルをマクロで別セル(書式設定:標準)に転記すると 1.23457E+13 となります。 またシステムが吐き出したエクセルの同じシート内に 以下のマクロで転記すると ↓ Sub 転記() 行 = 2 Do If Cells(行, 6).Value = "" Then Exit Do If Cells(行, 6).Value >= 10 Then Cells(行, 7).Value = Range("A2") Else Cells(行, 7).Value = Range("A3") End If 行 = 行 + 1 Loop End Sub ↓ このマクロだと A列~F列が書式設定が標準なのに文字列として表示されているのですが 転記先のG列が書式設定が標準であっても 12345678901234 (数値が文字列と保存されています と注釈有) と同じ状態のまま転記できます。 新しいBOOKのシート2に 会社の吐き出しデータをシートコピーした後、 (セルの書式設定:標準だが文字列で表示されている) そのBOOKに登録されているマクロで シート2のセルからシート1のセル(書式設定:標準)に転記すると 数字は数値に変換され、先頭の0は消え、桁数が多いと指数表示 となってしまいます。 ちょっと混乱しています。 理屈等教えていただければと思います。お願いします。

  • 複数セルに色をつける

    画像のように、同数値・異なる数値問わず 一行の複数セルに情報が入力された際に 該当セルに色を付けるにはどのようにしたらよろしいでしょうか? また、それが条件付き書式で可能な場合、 一行に対する書式を他の行にコピーするには どのようにすればよろしいでしょうか? ※今回は異なる数値がありますが、同数値の場合で   『条件付き書式』⇒『重複』を設定し、一行目を   右ドラッグ(又は形式を選択して貼り付け)で   他の行にコピーしようとすると、その際選択された全ての   行での書式になってしまい、一行単位での設定ができません。。。 どうぞよろしくお願いいたします。

  • 文字列が入っているセル数をカウントしたいのですが

    Excell2000です。初心者です。よろしくお願いします。 シート1にざっと1万件ぐらいデータがあるのですが、 A列に取引先のID B列に取引先名 C列に日付 D列に評価(数値) E列にコメント欄、が設けてあります。 日ごと更新のためAB列のデータの重複はあります。 E列のコメントは20件に1件ぐらい書かれている程度で、 記入がない場合は空欄です。 やりたいことは、シート2に取引先IDごとにコメントが何件あるのか出したいのです。 例えば A列のIDが1の場合でコメントが入力されているのは何件あるか。 そしてできれば、その数を出した隣にリストでコメントが出るようになるとうれしいです。 コメント数が5なら、そのコメントがリストに5行出るようにしたいです。 「特定でない文字列が入っている場合」というのはやはりマクロをかかないとだめなのでしょうか。(やったことがないので) いや、マクロでもがんばりますのでどなたか教えていただけませんか?

  • excelの文字列操作について

    A1セルに1234567890123という数値コードがあったとしますその一番下の桁だけとる書式設定はできますか?

  • 文字列の数抽出、行挿入マクロ

    急きょ下記処理を実施することになったのですが、本やネットで下記処理ができるような マクロを色々探していもなかなか見つからず…。(T_T) どなたか詳しい方がいらっしゃいましたら教えていただけませんでしょうか? ・A列に特定の文字列(;)があった場合、その列をコピー。 ・その列の下に文字列(;)の数と同数の行を挿入。 ・挿入した行のAセルに、文字列(;)のすぐ後ろの1ケタを貼り付け。 ・(挿入行が2行の場合) さらに下に挿入した行のAセルに、左から2つ目の文字列(;)の  すぐ後ろの1ケタを貼り付け。 なお、A列の行数は、現時点で500行ほどあり、今後増える可能性もあります。 【処理する前】       A列      B列    C列 1行目  1;32     555   AAA 2行目  29;1;4   222   GGG 3行目  600      111   FFF 【マクロ実行後】       A列    B列   C列 1行目  1     555   AAA 2行目  32    555   AAA 3行目  29    222   GGG 4行目  1     222   GGG 5行目  4     222   GGG  6行目  600   111   FFF どうぞよろしくお願いいたします。

  • Excelの文字列と文字列の連結

    A1のセルにはj50 C1のセルには01(ユーザ定義で00の書式) この二つの数値をCONCATENATE()関数を用いて文字列を 連結するとj501となってしまいます。 C1のセルを文字列の書式にするとうまくj5001と表示されますがそれ以外に方法はないでしょうか?

  • 一つのセルに文字列と数値を入力する場合の表示

    エクセル2007で、 A1に「="合計:"&A2&"円"」、A2に「1,000,000」と入力されている場合、 A2の数値は3桁ごとに桁区切りして表示するよう設定しているのですが、A1には「合計:1000000円」と表示されています。 A1の表示も桁区切りを適用して「合計:1,000,000円」となるようにするにはどのようにすればよいでしょうか? セルの書式設定→ユーザー定義で"合計:"#,##0"円"のようにしてできないこともないですが、 前述の方法のままでは不可能なのでしょうか? 調べても不明だったので、すみませんがよろしくお願いしますm(_ _)m

  • 【エクセル】16進数の文字列を2桁ずつ区切りたい。

    16進数の文字列を入力し、表示は2桁ずつハイフンを入れながら区切りたいと思っております。 入力:00062936EA37 表示:00-06-29-36-EA-37 「セルの書式設定」→「ユーザ定義」→「種類」で いろいろ試しているのですが、わかりません。 宜しくお願い致します。

  • 文字列を間引く方法

    EXCEL関数、あるいはマクロで下記の処理ができないでしょうか。    1列 1行 T20339636 2行 T20379678 3行 T20340013 のように各セルに9桁の文字列が設定されています。 各文字列の2桁目から5桁目までを間引き、下記のように 設定する。    1列 1行 T9636 2行 T9678 3行 T0013 ご教授のほど、よろしくお願いいたします。

  • エクセルで他のセルの値と決められた文字列

    エクセルで他のセルの値と指定した文字列を入力したい。例えば、あるセルに[1234]という数値を入力した時その右側のセルには[東京1234番地]と表示させたいのですがセル書式のユーザー定義で何とかなりますか?

専門家に質問してみよう