• 締切済み

エクセル マクロ

セルのB4~B300には5桁以上の数字が入っています。 そのB4~B300の下4桁のみをみて昇順で並び替えをしたいと思っています。 このような事をマクロで組みたいので、ご教授よろしくお願いします。 ※空欄の場合は全部下に。

noname#225437
noname#225437

みんなの回答

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

>B4~B300には5桁以上の数字が入っています 何が入っているのかイマイチ不明瞭ですが、仮に手入力の生数字が(場合によっては飛び飛びに)記入されているとして。 sub macro1()  range("C:C").insert shift:=xlshifttoright  range("B4:B300").specialcells(xlcelltypeconstants).offset(0, 1).formular1c1 = "=MOD(RC[-1],10000)"  range("B4:C300").sort key1:=range("C4"), order1:=xlascending, header:=xlno  range("C:C").delete shift:=xlshifttoleft end sub ぐらいで十分です。 >空欄の場合は全部下に。 同様に「何も記入されていない空っぽのセル」なのか、実は数式等で「""」が計算されていたりすると、話しが全然違ってきます。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

Sub Test()   Dim v As Variant   Dim i As Long, j As Long   Dim tmp1 As Variant, tmp2 As Variant   v = Range("B4:C300").Value   For i = 1 To UBound(v)     If Right(v(i, 1), 4) = "" Then       v(i, 2) = "9999"     Else       v(i, 2) = Right(v(i, 1), 4)     End If   Next   For i = 1 To UBound(v)     For j = UBound(v) To i Step -1       If v(i, 2) > v(j, 2) Then         tmp1 = v(i, 1)         tmp2 = v(i, 2)         v(i, 1) = v(j, 1)         v(i, 2) = v(j, 2)         v(j, 1) = tmp1         v(j, 2) = tmp2       End If     Next j   Next i   v = Application.Index(v, 0, 1)   Range("B4:B300").Value = v End Sub

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

Sub QNo9107984_エクセル_マクロ() Dim c As Range, myRange As Range Set myRange = ActiveSheet.Range("B4:B300") With Application .ScreenUpdating = False .Calculation = xlCalculationManual End With myRange.Value = myRange.Value For Each c In myRange If c.Value <> "" Then If IsNumeric(c.Value) Then c.Value = Format(c.Value Mod 10000, "0000") & "゛゜" & c.Value Else c.Value = "゛゜" & c.Value End If End If Next c With myRange .Sort .Resize(1, 1) .Replace What:="*゛゜", Replacement:="", LookAt:=xlPart End With With Application .Calculation = xlCalculationAutomatic .ScreenUpdating = True End With End Sub

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは 色々な方法が有りますけど、1例で、 Sub test()   Dim s As Worksheet   Dim t As Range   '元データが「Sheet1」にあるとして   Set t = Worksheets("Sheet1").Range("B4:B300")   Application.ScreenUpdating = False   Set s = Worksheets.Add   With s     t.Copy .Range("A4")     With .Range("B4:B300")       .Formula = "=right(A4,4)"       .Value = .Value       .Offset(, -1).Resize(, 2).Sort _         Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlNo       t.Value = .Offset(, -1).Value     End With   End With   Application.DisplayAlerts = False   s.Delete   Application.DisplayAlerts = True   Application.ScreenUpdating = True End Sub

関連するQ&A

  • エクセル2007でのマクロの記録

    マクロ初心者です。しょうもない質問で申し訳ありません。 エクセル2007で並び替えをマクロに記録させても並び替えが実行できません(エクセル2003は可能でした)。 例えば・・・マクロの記録を実行→B4セルから下に10~1の数字を入力→その後並び替えボタンをクリックし、昇順で1~10に並び替える→マクロの記録を停止。確認のため、シート2でマクロを実行。数字は入力されるが、並び替えがおこなわれません(T_T) エクセル2007では並び替えのマクロは記録できないのでしょうか??それとも不具合ですか?もし簡単に出来る方法等があるなら教えて頂ければ幸いです。 お手数をおかけしますが、どなたかご回答を頂けると幸いです。

  • エクセルのセルに入れた文字あるいは数字を別なセルに1文字づつ、「右詰」で移したい

    以前に エクセルのセルに入れた文字あるいは数字を別なセルに1文字づつ移したい、ということで質問しまして、「MID関数を利用する」事で、先頭文字から一文字ずつ別々なセルに移すことが出来ましたが、スミマセンが次のような場合はどのような関数になるのでしょうか? 例えば「番地などの表示」等で1桁の場合もあれば、5桁あるいは6桁等々の場合もあるとします。これを別なセルに下一桁を合せる様にしたいのです。 例としまして セルA1に1桁~6桁の数字(例:345678)を入力した場合、これを右側のB1には3を、同様にC1には4を、D1=5、E1=6、F1=7、G1=8を関数で入力できるようにしたい。 問題は、桁数が毎回違う場合にG1に下一桁が来るようにしたいのですがRIGHT関数では下一桁だけ応答されるのは上手くいくのですが、下二桁、三桁以上の場合には上手くいきません。 つまり「A1に789」の数字を入力したら、G1=9が、F1=8が、E1=7が応答されるようにしたいのです。 勿論、5桁の場合にはB1が空欄で、C1、D1、E1、F1、G1が埋まる様に、4桁であればB1とC1が空欄で、D1~G1が埋まるように、三桁の場合にはB1~D1が空欄でE1~G1が埋まるようにですが、出来ますでしょうか?? よろしくご教授お願いします。

  • Excelのマクロで()内の文字を抽出して書き出したい

    HTMLにあるテーブルの部分をコピペして貼り付けたExcelファイルがあります。 A~Cまでの3列が埋まっている状態で、D以降の列は空欄です。 C列に123(1112)というように、数字(数字)の記載になっている部分があります。 ()の前と、中は必ず半角数字で、桁は1桁~5桁までと幅広い状態です。 この()内の数値をD~F欄に書き出したいです(縦3列のものを、横3列として書き出したい) 数字(数字)という記載のセルは、必ず縦に3つ並んでいますが C列は膨大なセル数なうえに、数字(数字)という記述以外のセルも間に入っております(数字のみのセルか、空欄のセルです) 3つ並んでいる部分のみを探して、()内の数値を抽出し、D~F列に書き出すことは可能でしょうか? 書き出す場所は、3つ並んでいるC列の最初のセルの横のD~Fだと助かります。 (数字(数字)がC6~8にあった場合、D6~F6に書き出される) なお、数字(数字)というセルはC列以外にはなく、4つ以上縦に並ぶ事もありません。 さすがにこのような内容を実行するのは不可能でしょうか? もし可能でしたら、マクロを組んでいただきたいです・・・よろしくお願いします。

  • エクセルのマクロの組み方

    マクロの初心者です。エクセルのマクロを組んでいるのですが,壁にぶち当たってしまいました。次のようにしたいのですが。 たとえば,A1のセルに「りんご」B1に「割引(1)」C1に「割引(2)」が入っている場合にはD1のセルに200を返す。A1が「りんご」でB1が空欄,C1が「割引(2)」ならD1に230を返す,A1が「みかん」でB1,C1が空欄ならD1に150を返す,のようにいくつかのセルの入力内容によって特定のセル(この場合はD1)に返す値を変えるようなマクロってありますでしょうか。 Selection.Replaceのようなものを使おうと思ったのですが,見当違いでしょうか。 ご指導をお願いします。

  • エクセルで数字の下1桁を見て並び替える

    エクセルで下記の様な数字が並んでいます。 A列の下1桁の数字は上から順に増えていて、ある数字で1に戻りまた増えています。 その数字は毎回同じではなく、6までの場合もあれば10までの場合もあります。 下記の例では上から6行、次は4行、次は7行と下1桁の数字によってグループ分け出来ますよね? それで上から6行目までのB列の値(462~530)をコピーしてSheet2のA1から横方向に並べます。 その次は7行目から10行目までのB列の値(356~487)をコピーしてSheet2のA2から横方向に並べます。 その次も同じように並べます。 B列が空欄の場合もありますが、その場合はそのままSheet2にも空欄のセルを作ります。 1グループ全部のB列が空欄でもそのままSheet2に空欄の行を作ります。 この動作をマクロで出来る式を教えて頂けないでしょうか? A列          B列 0213240101     462 0213240102    387 0213240103    556 0213240104    585 0213240105    536 0213240106    530 0213240201    356 0213240202    632 0213240203    486 0213240204    487 0213240301    586 0213240302    670 0213240303    619 0213240304 0213240305    645 0213240306    487 0213240307    651 0213240401 0213240402 0213240403 0213240501    455 0213240502    623 0213240503    411 Sheet2 A列   B列    C列   D列    E列    F列   G列 462    387    556    585    536    530 356    632    486    487 586    670    619            645    487    651    455    623    411

  • エクセル マクロ

    エクセルを使って12桁の数字をsheet A と sheetBとの違いを調べる、表?をつくりたいのですが、マクロを使えば簡単と聞きました、マクロは全くわからないので、マクロを使わなくてもいいのですが、良い方法はありますか?  例えば エクセルの sheet A に 12桁の数字を50, sheet Bに12桁の数字を50, その中からsheetAにはあってsheetBには無いもの、sheetAには無くてsheetBには有るもの を色をつけてわかるようにしたいと思っています。 みなさんよろしくお願いいたします。

  • 【詳しい方HELP】CSV取込、並び変えマクロ

    CSV取込により、添付画像のフォーマットに値で貼り付けし、昇順に並び変え、 印刷が出来るマクロが出来ないか考えていますが、何から手をつけていいのか分からない ため、詳しい方ご教授お願いします。 ■したいこと (1)CSVを取込し、値で添付のようなフォーマットに貼り付けしたい  6行目でいうと、CSVのそれぞれの以下のセルの値がエクセル表の以下のセルに  値で貼り付くようになります。  ※エクセル表は5行目がタイトル行になります。  ※コピー後の貼り付けは値で貼りつけしたい       エクセル表 B6 C6 D6 E6 F6 G6  CSV   A2 B2 E2 F2 I2 L2 (2)昇順に並び変えをしたい  G列は数字になりますので、昇順で並び変えをしたい (3)値が入っている範囲で印刷をしたい。  CSV取込によりセットした値の印刷範囲で自動で印刷するようにしたいです。 すみませんが、宜しくお願いします。

  • マクロについて

    エクセル入門者です。 お聞きしたいのは, (1) 入門~応用まで,マクロをわかりやすく説明しているおすすめのURLがあればおしえてください。 (2) 具体的には,1つのセルに,たとえば「12345」と入力されているものを「1」「2」「3」「4」「5」の数字が,1つのセルに1つだけ入るようにしたいんです。  かつ,「12345」の次の行にはまた別の5桁の数字があり,それもずっとそういう作業をするマクロを組みたいのです。 (1),(2)どちらかでもけっこうですので,どなたかご教授ください。

  • エクセルの並び替えについての質問です。

    エクセルの並び替えですが、例えば列の並び替えで2列(仮にA列・B列)に数値は入れてあり、A列を基準に昇順する場合2003ではその並べ替えをしたい範囲を指定して、「データ」→「並べ替え」→範囲の先頭行をデータにチェックを入れて、最優先されるキーを列Aにして、昇順にチェックを入を入れれば、A列基準で並び替えが完了しましたが、2007ではではその並べ替えをしたい範囲を指定して、「並べ替え」→最優先されるキーを選択すると列A・列Bの選択ではなく、A・B列の1行目の数値の選択となり、それで並び替えると1行目はそのままで、2行目からの並び替えになってしまいます。また1行目を数値のない空欄セルにしておいて1行目から上記作業をすれば、優先されるキーは列A・列Bの選択肢が出ますが、もしその表が1行目が空欄で無い場合はどうするのでしょう?また、2003では並び替えの作業を『繰り返し』で別の表も同じく並び替えの作業が出来ますが、2007では上記の1行目空欄セルにしておいてから並び替えをして『繰り返し』の作業は出来ません。 どの様にすれば、『繰り返し』の作業も出来るのでしょうか?

  • エクセル マクロで数値が変った時行挿入できますか

    最近VBAを勉強しはじめた初心者です。 簡単なマクロを使ってエクセルシートを作成中しているのですが、以下の部分がどうしても分りません。 (1)ある列(例えばA列)に数字が入っています。 (2)その数字は、セル1個つき1桁から3桁(1から100の場合)です。 (3)「1」「1」「1」と3セル並んでいたり、「2」「2」が2セルだったりと色々です。 (4)この数字が変化したとき、例えば「1」と「2」の間、「2」と「3」の間などに、  自動的に行挿入して、空白行を作りたいと思っています。 マクロでこのような事が可能でしょうか? もし、お分かりになる方がおられましたら、ご教示の程お願いいたします。 どうぞよろしくお願いいたします。

専門家に質問してみよう