• ベストアンサー

Excelのマクロを作ってもらえますか?

こんにちは。 エクセルのマクロで、Sheet1に転々と 入力されているデータを すべてA1の列へ統一して並べ替え(2) 同じデータの数を計算してB2へ記述する(3)などという マクロができるなら作っていただけないでしょうか? もし、数の入った行のみ残して削除までできれば最良なの ですが(4) (2) AA-20 AA-20 AA-20 BB-30 CC-30 CC-30 CC-30 (3) AA-20   3 AA-20 AA-20 BB-30   1 CC-30   3 CC-30 CC-30 (4) AA-20   3 BB-30   1 CC-30   3 このようになのですが、 お時間のあるときで結構ですので宜しくお願いします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

作ってみました。 シート1に点在して入力されている文字列の個数を数えて シート2に書き出します。 並び替えはしていないので、その後並び替えて下さい。 Public Sub strCellCount() Dim r As Range, x As Range Dim d Dim pos, str Set d = CreateObject("Scripting.Dictionary") Set r = Worksheets("Sheet1").Cells.SpecialCells(xlCellTypeConstants, xlTextValues) For Each x In r If d.Exists(x.Value) Then d.Item(x.Value) = d.Item(x.Value) + 1 Else d.Add x.Value, 1 End If Next Set r = Worksheets("Sheet2").Range("A1") pos = 0 For Each str In d.keys r.Offset(pos).Value = str r.Offset(pos, 1).Value = d.Item(str) pos = pos + 1 Next End Sub

moonhare
質問者

お礼

有難うございました! できました!!完璧です!うれしいです! 本当に何でもできてしまうんだと感動してます。 少しでも理解できるように作っていただいたマクロを解読しながら大事に使わせていただきます。 また宜しくお願いします。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

B列以右のデータをA列の空きセルに突っ込み、ソートします。 そして件数を出します。 Sub test01() i = 1 Dim cl As Range For Each cl In Selection If cl <> "" Then While Cells(i, "A") <> "" i = i + 1 Wend Cells(i, "A") = cl i = i + 1 End If Next MsgBox i - 1 Range(Cells(1, "A"), Cells(i - 1, "A")).Sort key1:=Range("a1"), order1:=xlAscending '------ m = Cells(1, "A") n = 1 k = 1 Cells(k, "C") = m For j = 1 To i - 1 If Cells(j, "A") = m Then n = n + 1 Else Cells(k, "D") = n n = 1 k = k + 1 m = Cells(j, "A") Cells(k, "C") = m End If Next j Cells(k, "D") = n End Sub B列以右のデータの有る範囲を多めに範囲指定して 実行してください。

moonhare
質問者

お礼

有難うございました! 出来ました~いろいろな方法があるのですね。 データの履歴を残したい時などにとても便利です。 大事に使わせて頂きます。 また、宜しくお願いします。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

題意が今一つわからないので、以下の操作を行って、結果をお知らせください。 1.メニューのツール>マクロ>新しいマクロの記録 とクリックする。 2.「マクロの記録」でOKを押す。 3.あなたの思っている動作を行う。(失敗しないよう、すべての手順をお願いしますよ) 4.メニューのツール>マクロ>記録終了 とクリックする。 5.メニューのツール>マクロ>編集 とクリックする。 6.[Sub Macro1]から[End Sub]までを範囲選択し、コピーする。 7.回答への補足に貼り付ける。 多分、行列入れ替えてコピーし、降順にコピーし、再び行列入れ替えてコピーでしょうね。

moonhare
質問者

補足

ありがとうございます。 操作をしたマクロを貼り付けました。 SortはCADからデータを転送し貼り付けるため、 どの列のどの行にデータが入力されているか 決まっていないので、上部へつめる為だけのものです。 実際にはN列くらいまではSortさせています。 各列のデータを切り取ってAの列の後尾へコピーし COUNTIFを行うためのSORTです。 (ここまででも良いのです) COUNTIF関数でデータの数を出し、 隣の列へ文字列としてコーピーしてデータの 入っていない行を削除しているものです。 ご確認宜しくお願いします。 ' Macro1 Macro ' マクロ記録日 : 2004/11/23 ユーザー名 : moonhare ' ' Columns("A:A").Select Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Columns("B:B").Select Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Columns("C:C").Select Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Columns("D:D").Select Selection.Sort Key1:=Range("D1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Columns("E:E").Select Selection.Sort Key1:=Range("E1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("C1:C2").Select Selection.Cut Range("A4").Select ActiveSheet.Paste Range("D1:D2").Select Selection.Cut Range("A6").Select ActiveSheet.Paste Columns("A:A").Select Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("B1").Select ActiveCell.FormulaR1C1 = "=COUNTIF(C[-1],RC[-1])" Range("B4").Select ActiveCell.FormulaR1C1 = "=COUNTIF(C[-1],RC[-1])" Columns("B:B").Select Selection.Copy Range("C1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False Columns("B:B").Select Selection.Delete Shift:=xlToLeft Range("2:3,5:7").Select Range("A5").Activate Selection.Delete Shift:=xlUp Range("A1").Select End Sub

関連するQ&A

  • EXCELのマクロにて

    EXCELのにて連続したデータを入力したデータベースがあります。(行が5000、列がAAまで) このデータベースのデータの最終行だけを指定して違うシートにコピー・貼り付けがしたいのです。 マクロにてこのような作業をするときにはどういった文をかけばよいですか。

  • EXCEL マクロの記録で並べ替えのマクロをつくるとそのシートでしか使えないのでしょうか?

    EXCEL マクロの記録で並べ替えのマクロをつくるとそのシートでしか使えないのでしょうか? EXCEL2007を使っています。 マクロの記録で並べ替えのマクロをつくるとそのシートでしか使えないのでしょうか? シート1 1 3 2 というデータを「マクロの記録」で昇順に並べ替えるマクロを作成します。 シート2 3 5 4 というデータに適用したいのですが、マクロを実行するとシート1のデータが 並べ替えられてしまいます。 マクロを読むと「シート1」という記述があるのでシート1にしか適用できないようです。 マクロの記録だけで別のシートにも適用できるマクロを作成できないでしょうか? (ただの並べ替えだけだったらマクロを作成する必要はないのですが、実際にはもっと複雑な 動作をさせたいのです)

  • エクセルで

    エクセルである1列に入力されてる文字の中で同じ値の数を数えたいのですが。 例えば     A列  B列   1 aa 2 bb 3 cc 4 aa 5 cc ・ ・ ・ 100 bb といった表で「aa」「bb」「cc」等、その列に入力されているすべてのデータのそれぞれの数を一度に表示させることは可能でしょうか? 分かりにくくて申し訳ありませんが詳しい方がいらっしゃいましたらよろしくお願い致します。

  • エクセルで、規則性はあるのですが、数字と文字が混在しているものを重複しないように抽出したいのですが。

    エクセルで、シート1に列A(数値)と列B(文字列)を結合したものが、 列C(列A&列B)であります。 これをシート2で列Cの文字列が重複しないように抽出したいのです が、どうしたらよいのでしょうか? シート1     列A  列B  列C 行1  項目A 項目B 項目C 行2  2   CC  2CC 行3  3   AA  3AA 行4  5   BB  5BB 行5  7   PP  7PP 行6  2   CC  2CC 行7  5   AA  5AA これをシート2で、     列C 行1  項目A 行2  2CC 行3  3AA 行4  5BB 行5  5AA 行6  7PP このように重複するものを統合した形でまとめたいのですが、 わかるかたがいれば教えてもらえないでしょうか?

  • エクセルの並べ替えについて

    列に日付・品名・数量 行にそのデータを入れています。 このデータを元に列に日付を入れて 行に日付のデータを入れ替える方法があるのでしょうか? 3/10 AA 500 3/10 BB 500 3/11 AA 10 3/11 CC 500というデータを 3/10  3/11 AA 500 AA 10 BB 500 CC 500こんな具合に出来ませんかね。

  • エクセル2003のVBAを教えて

    エクセル2003のVBAを教えてください。 次の対象データで、(1)(2)(3)の作業が出来るエクセルVBAを教えて下さい。 (1)(2)(3)個々のVBAでお願いします。 ●対象データ:種類(A列)、文字(B列)、    データの行数:不特定なので、データのある最終行までとします。 ●教えていただきたい項目  (1):種類だけを(C列)に取り出す。  (2):種類の先頭に空白の行を3行入れて、追加の2行目の種類(A列)に文字(B列)を入れる。  (3):種類が5行以上あるときは、5行ごとに空白行を追加する。 ●対象データ 種類(A列)   文字(B列) AA       あああ BB       いいい BB       いい BB       いいい CC       うう CC       うう DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ ●(1)のVBAの結果(このようになるVBAを教えてください。) (C列) AA BB CC DD ●(2)、(3)のVBAの結果(このようになるVBAを教えてください。) 種類(A列)    文字(B列) あああ AA        あああ いいい BB        いいい BB        いいい BB        いいい うう CC        うう CC        うう ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ

  • エクセルで複数列を二列にまとめる

    エクセルのデータ成形に、知恵を貸していただけますでしょうか・・・ エクセルで以下のようなデータがあります(例では8行8列) コードは本当はランダムです。 #と右下の部分は空白セルです。横には数字、コード、数字、コードの並びで、数字は一行目のみです。 1 aa-1 2 bb-1 3 cc-1 4 dd-1 # aa-2 # bb-2 # cc-2 # dd-2 # aa-3 # bb-3 # cc-3 # aa-4 # bb-4 # aa-5 # bb-5 # aa-6 # aa-7 # aa-8 これらを 1 aa-1 1 aa-2 1 aa-3 . . 2 bb-1 2 bb-2 . . 4 dd-2 というように 1. 複数の列を2列ずつのグループで2列にまとめ 2. それぞれのグループごとに各コードの左のセルにグループの数字をつけたい   (どのコード(aa-1など)がどの数字グループなのか分かるように) と思っています。 なにかいい方法はありますでしょうか。 調べてはみたのですが、 複数列を一列ではなく、二列ずつまとめていることや、 各列の長さが一様ではないことなどから 各所で紹介されている方法が適用できないでおります。 VBAもほとんど使ったことがないので、それらを応用できません。 どうぞ知恵を貸していただけたらと思います。 よろしくお願い致します。

  • エクセル マクロ 文字列からの行数の取得

    エクセルでマクロ初心者です。よろしくお願いします。例えば1列目にデータ名が入力されていてその個数が可変である場合(小計は末尾ではありません)小計行の1列目から数式をいれたいのですが、行数が固定でないため小計と書かれたセルの行数を取得したいのですが、わかりません。いい方法をお願いします。    A B C D データ aa bb cc 小計 ・ ・

  • エクセル2003@(ちょい難)別シートからある固定値の全セルを抽出し、同じ列にある値を合計する

    お世話になります。 エクセルは簡単な関数が扱える程度です。 2時間近くググったり質問サイトの過去ログを 調べたりしても解決出来なかった計算があるので、 ご教授の程よろしくお願い致します。 やりたいことの説明 ↓(ここから) ================================== (1)シート1に次のような表を作成     |A列|B列| ----|---|---|---- 1行 |AA| 5 | 2行 |BB| 4 | 3行 |AA| 3 | 4行 |CC| 7 | 5行 |CC| 9 | 6行 |BB| 6 | (2) シート2の任意、例えばC1に「AA」と入れる。 この時、シート1のA列の中に「AA」が含まれる行を全て抽出し、 その隣のセルの値の合計をシート1のセルに出力されるようにしたい。 例えばこの場合だと、シート2のC1に「AA」と入れることにより、 シート1のB1(値は5)とB3(値は3)を加算し、シート2のD1に計算結果(値は5+3で8)を出力したい。 ================================== ↑(ここまで) 以上、宜しくお願い致します。 質問の内容がちょいややこしいので、 分かり辛ければエクセルの画像をつけて 説明させていただこうと思います。

  • エクセルのマクロ機能について

    もう一度 助けてください エクセルの集計表である列の移動 並べ替えをエクセルのマクロ機能でつくりました ボタンを押すだけで うまくいっていたのですが データーが増え行を増やそうと 前のマクロを削除して また最初から作ろうとしたところ 記録できません 静的変数が64KBを超えたとかでます 編集 削除しようにも実行とキャンセルしか使えません いろいろほん(VBA)を見ましたが 私のレペルでは100年無理です 簡単なエクセルのマクロにも 範囲があるんですか あるひとつのシートだけマクロを残しています 手作業の集計や決まった作業はたいへんです

専門家に質問してみよう