EXCELマクロで注文番号の種類分けと並べ替え

このQ&Aのポイント
  • EXCELマクロで注文番号をアルファベット3文字から始まる種類とそれ以外に分け、日付の昇順に並べ替える方法を教えてください。
  • EXCELマクロ初心者です。注文番号をアルファベット3文字から始まる種類とそれ以外に分け、日付の昇順に並べ替えたいです。VLOOKUPを使って、B列には注文番号に対応する日付が入っています。お手数ですが、教えていただけませんか?
  • EXCELマクロで注文番号をアルファベット3文字から始まる種類とそれ以外に分け、B列の日付の昇順に並べ替えたいです。注文番号はA列にあり、VLOOKUPを使ってB列に日付が表示されます。初心者なので、具体的な手順を教えていただけますか?
回答を見る
  • ベストアンサー

EXCEL マクロ 文字列を種類分けして並べ替え

みなさんいつもいろいろ教えていただきありがとうございます。 マクロ初心者の者です。 さて、早速ですが以下の内容を実現できるマクロを 教えていただけませんでしょうか?     A 1 A********* 2 0********* 3 1********* 4 3********* 5 ****** 6 BAE****** 7 BSE****** ・A列に上記のような文字列が入力されています。  (※注文番号)(数十~最大100行くらいまで) *にはランダムに数字が入ります。 A列の並び順、数はランダムです ・B列にはA列からVLOOKUPを使って得た日付(納期)が入ります。 例(B1セル)⇒=VLOOKUP(A1,納期リスト,2,FALSE)   結果 2/20 と表示されている ・C列にはA列からVLOOKUPを使って得た、客先名が入ります。 例(C1セル)⇒=VLOOKUP(A1,納期リスト,3,FALSE)   結果 ***商店 などと表示されている ■この場合に、アルファベット3文字から始まるA6,A7の種類の  注文番号"以外"を削除し、B列の日付の昇順に、  残った注番を並べ替えたいです。 お手数ですが、ご指導よろしくお願いいたします。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>この場合に、アルファベット3文字から始まるA6,A7の種類の注文番号"以外"を削除し ここだけであれば、 Sub try() Dim RegExp As Object Dim r As Range Set RegExp = CreateObject("VBScript.Regexp") RegExp.Pattern = "^[a-zA-Z]{3}\d+" For Each r In Range("A1", Cells(Rows.Count, 1).End(xlUp)) If Not RegExp.Test(r.Value) Then r.ClearContents End If Next Range("B1", Cells(Rows.Count, 2).End(xlUp)).Offset(, -1) _ .SpecialCells(xlCellTypeBlanks).EntireRow.Delete Set RegExp = Nothing End Sub 例えばこんな感じかな? >B列の日付の昇順に、残った注番を並べ替えたいです。 ここはマクロの自動記録でも出来る範囲かと。 ご参考程度に。

hamanyaaki
質問者

お礼

回答ありがとうございます! 早速試してみます!

hamanyaaki
質問者

補足

これでうまくいく…と思ったのですが、 マクロとは関係ない並べ替えで別の問題が出てきまして… もしよろしければこれに関しても教えていただけませんでしょうか? 【状況】 B列には日付(20090208のような形式)以外に 文字列、空白セルも合わせて並んでいます。 B列↓ 未回答 空白セル 20090208 20090210 未定 空白セル 20090101 【実現したいこと】 日付昇順 ↓ 文字列(未定、未回答) ↓ 空白セル の順に並べ替えをしたいです。 状況補足 ・全ての文字列はVLOOKUP関数の結果として表示されています。 ・この操作をマクロに組み込むことを考えています。 ・空白セルは目立たなければ他の記号などに置き換えても構いません。 このような感じなのですが…いかがでしょうか?

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

#1です。 マクロではなく通常の並べ替えの操作で、 >日付昇順 > ↓ >文字列(未定、未回答) > ↓ >空白セル の順に並びませんか? 並べばその操作を記録するだけなのですが。

hamanyaaki
質問者

補足

日付昇順  ↓ 空白セル  ↓ 文字列(未定、未回答) の順に並んでしまうんです。 空白セルには実際には数式が入っているからでしょうか…? 削除マクロ教えていただきありがとうございました! ↓別質問で立てましたのでこの質問を締め切らせていただきます。 http://oshiete1.goo.ne.jp/qa4735573.html

関連するQ&A

  • エクセルマクロで日付検索について

    エクセルのマクロで日付を検索するマクロについて質問です。 ブックAのシート1のA列に A1 2017/3/13 A2 2017/4/1 A3 2017/4/19 A4 2017/5/16 A5 2017/7/17 A6 2017/9/5 というような日付が入っています。 ブックBのシート1のA1セルに2017/6/3と入力してマクロを実行した際に その日付に一番近い一つ前の日付を探し、見つけた日付のB列のセルを ブックBのシート1のA2セルに表示したいです。 今回の例であれば2017/6/3に対してブックAのシート1のA列はA4セルが当てはまり その当てはまったA4セルの1つ横のB4セルの内容をブックBのシート1のA2セルに表示するということです。 よろしくお願いします。

  • 文字列リストから文字列リストの抽出

    A列のリストの文字列に、B列のリストの文字が含まれていたらそれを取り出すにはどうしたらよいでしょうか? ※画像を参照してください。 例:A2セルの文字列にB2~B4の文字が含まれていないかをチェック、含まれていた文字列(B2~B4の内容)をC列に表示する。 関数なら何とかできますが、マクロの知識がほとんどありませんのでマクロが必要になるようでしたら詳しく教えていただければ幸いです。 よろしくお願いいたします。

  • excelで文字列を検索する関数を教えてください。

    いつもお世話になります。 エクセルの関数で、シートAのセルA1に入っている文字列をシートBのC列から探し出し、同じ文字列があればTrueをなければFalseを返す関数を教えてください。 わからないながらも色々調べてみたのですが、検索にはVLOOKUPがよく使われているようですが、シートBのC列は、データの並べ替えができないので、VLOOKUPは、使えないのです。 よろしくお願いします。

  • <文字列マクロについて>

    <文字列マクロについて> 皆さま お力を貸して下さい。 初心者で、何もわからず書いておりますがすみません。 下記の2つのマクロを教えて下さい。 ?横に並んだ「ある行」に在るデータを「列」に変換し、  指定した数だけ並べる    あいうえお    ←A1セルからE1まで5列(これは状況により変わる)       ↓(マクロ実行:3行同じ数だけ並べるという指定)  あ        →A1セルから下にひたすら、同じ文字が続き順に並ぶ  あ  あ  い  い  い  う  う        →A1セルから下に並べる(3行は指定できれば別の数字にも変えたい  う  え  え  え  お  お  お ?規則的に並んだデータのまとまりをセットで移動する。  例だと5つの塊(これは変数とおきたい)    あ A              a  い B              b  う C               c   え D               d  お E              e    ↓(マクロ実行)  あ  い  う  え  お  A  B  C  D  E      ・  ・  ・  ・    a b c d e    

  • 検索値に数値や文字列で検索してもエラーになる

    WIN7 EXCEL2007でマクロ作成中の初心者です。  A列(セルA3からA20)に  組、 Z3、 B4(1)、45、8 などの文字列や数値が表示されています。  (セルA列には、VLOOKUPで他の表から検索したものです。)   そして、C列に(セルC3からC20) セルA3が 組のときは   セルC3に 5:00 を入れなさい セルA4が Z3のときは   セルC4に 6:00 を入れなさい セルA5が B4(1)組のときは セルC5に 9:00 を入れなさい    セルA6が 45  のときは セルC6に 11:00を入れなさい という式をいれたいのです。 ちなみに自分で以下の式をいれて確認したところ =VLOOKUP(A3,データ範囲名,2,FALSE) =VLOOKUP(A4,データ範囲名,2,FALSE) =VLOOKUP(A5,データ範囲名,2,FALSE) 以下つづく するとセルA3の表示が W3 のときは #N/Aになり W3のとき正常に表示されます。 45という数字も出来ました。 検索値は文字列でも数値でもOKと聞いてますが、なぜ出来ないのでしょうか? 他のfindとか別の方法でも出来る方法教えていただきたいです。

  • Excelマクロにて文字列連結

    現在Excelのマクロにて文字列の連結を行っているのですが、 繋いだ文字列を改行を付けて連結を行いたいです。 セルとセルの中の文字列を改行を付けて連結するにはどうしたらいいのでしょうか? 例 A1セル「あああ」 B1セル「いいい」 C1セル「あああ       いいい」 Worksheets(sheet1).Range("C1").Value = Worksheets(sheet1).Range("A1").Value + Worksheets(sheet1).Range("B1").Value をすると 「あああいいい」と1行で表示されてしまいます。     ↑ ここに改行を入れるにはどうしたらいいのでしょうか? 以上、宜しくお願いします。

  • EXCEL VBA マクロ 日付

    こんばんわ。 EXCEL VBA マクロ の日付について質問があります。 セル"A1"で"年"(例:2008)、セル"B1"で"月"(例:5)を指定します。 C1からC500くらいまで(毎日増えていきます)日付が入っています。 A1、B1で指定した年月と同じC列の日付を 10桁スラッシュ区切りの形式(例:2008/05/15)で 右隣のセル(D列)にコピーしたいんです。 困ったことにC列は形式が決まっているわけではありません。 たとえば、2008年5月15日の場合、 ・20080515・2008年5月15日・2008.05.15・2008.5.15 ・2008/05/15・2008/5/15・08/05/15・2008-5-15 その他、いろいろ考えられます。 これをマクロでやるにはどうすればいいでしょうか。 毎月一回実行します。 日付の形式をチェックするところで やり方がわからなくて困っています。 よろしくお願いします。

  • マクロをすっきりさせたい・・・

    いつもお世話になっております。 下記、マクロを組んだのですが、 簡潔にまとめるには、どうしたら良いでしょうか・・・ 宜しくお願い致します。 Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B24")) Range("D14").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B25")) Range("D15").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B26")) Range("D16").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False)

  • EXCEL マクロの指定の仕方

    マクロで線の色を指定したいのですが、上手くいかず困っています .ForeColor.RGB = Worksheets("sheet1").Range("D1").Interior.ColorIndex 赤色を指定したいのですがBにどういうコードを入れれば良いですか? 列Dには以下の数式を入れてあり、列Bのデーターを取得するようにしています。 列A 列B  列C  列D あ  red  あ  =VLOOKUP(C1,A:B,2,FALSE) い  green あ  =VLOOKUP(C2,A:B,2,FALSE) マクロは始めたばかりで良く分からないので、他に必要な情報もわかりません 必要な情報なども併せて教えてください。 よろしくお願いします。       

  • エクセルでのマクロを使った特殊な文字分け

    エクセルのマクロを使った処理について、初心者の小生にご教授ください。 今A列に文字列(半角全角混在)が入力されています。 この文字列の左から20文字までを同行のB列のセルに、21文字から40文字までを同行のC列のセルに、残りを同行のD列のセルに分割してコピーするマクロを作りたいと思っています。 しかし、文字数のカウントの仕方が特殊で悩んでいます。 カウントのルールは 1.半角は1文字、全角は2文字としてカウントする。 2.全角の場合はその文字の前と後ろに半角の『"』を入力し、それ自体も1文字としてカウントする。 3.全角が2個以上連続する場合は、その塊の前と後に『"』を入れる。(例:文字列が『あい』だとしたら、『"あ""い"』ではなく『"あい"』なるため、8文字ではなく6文字とカウントする。) というルールです。 文字を分けるときに、分ける境目に文字が来てしまう場合(たとえば全角が20文字目と21文字目となる場合)は、右のセルに入力しなくてはいけません。 また、全角の前後にある『"』は全角とひとくくりとして考えるため、分けることはできません。(例:B列の最後が『あ』となって、C列の最初の文字が、その全角の後ろの『"』となることはできない。) というややこしいルールとなっています。 文字列を左から順に確認していき、パターンで条件分けする方法も考えたのですが、処理が膨大になってしまい、こんがらがってしまいました。 何かすっきりとした解決方法はないものでしょうか。 ややこしい条件で分かりにくくで申し訳ございませんが、お知恵をお借りしたいと思います。 よろしくお願いいたします。

専門家に質問してみよう