- 締切済み
エクセルマクロ
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! お示しの画像を見るときっちりデータが整理されていますので 他の方々からの指摘があるように関数の方がすぐに結果が反映されて良いと思うのですが・・・ どうしてもVBAで!というのであれば、一例です。 データ配置が判らないので勝手に↓の画像のようにしてみました。 Sheet1のデータをSheet2に表示するようにしています。 画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面がでますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i As Long Dim ws As Worksheet Set ws = Worksheets(2) Application.ScreenUpdating = False i = ws.Cells(Rows.Count, 1).End(xlUp).Row If i > 1 Then ws.Rows(2 & ":" & i).ClearContents End If For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(ws.Columns(1), Cells(i, 2)) = 0 Then With ws.Cells(Rows.Count, 1).End(xlUp).Offset(1) .Value = Cells(i, 2) .Offset(, 1) = WorksheetFunction.SumIf(Columns(2), Cells(i, 2), Columns(3)) End With End If Next i Application.ScreenUpdating = True End Sub 'この行まで ※ Sheet1のデータ変更があるたびにマクロを実行する必要があります。 この程度ですが参考になりますかね?m(_ _)m
- KURUMITO
- ベストアンサー率42% (1835/4283)
マクロにすることのメリットは全く感じレれませんね。 つぎのように関数を使って対応すればよいでしょう。 例えばお示しの表がA1セルに月、B1セルに野菜、C1セルに数量の項目名がそれぞれあり各データは2行目以降に入力されているとします。 D列を作業列としてD2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",IF(COUNTIF(B$2:B2,B2)=1,MAX(D$1:D1)+1,"")) お求めの表をFおよびG列に表示させるとしてF2セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。 =IF(ROW(A1)>MAX($D:$D),"",IF(COLUMN(A1)=1,INDEX($B:$B,MATCH(ROW(A1),$D:$D,0)),IF(COLUMN(A1)=2,SUMIF($B:$B,$F2,$C:$C),"")))
- imogasi
- ベストアンサー率27% (4737/17069)
シートが各月で別になっているのかどうか質問に書いてない。 毎月が別ブックになっているとなおさらやりにくい。 そういうところ神経が行ってないことに、質問者が初心者でよく判ってないところが出ている。 またデータ実例を挙げてないが、抽象方法論を教えてもらって、後はコードを自分で作る力は質問者にまだ無いと見る。 エクセルの質問では模擬的データ実例をあげて質問するもんだ。丸投げ質問だが、たとえ回答する人が出ても、回答のコードも書けないだろう。 まして12シートに別になっている場合はそう簡単ではない。 1シートにどんな販売商品があるかを、VBAで出すのも簡単ではない。これが出て無いと、ある商品の1シートでの売上合計さえ出せない。 商品名で検索していくのもこれが必要。 ーー 処理する仕組み(大枠の手順)をロジックというとすれば、このロジックが、どういうロジックが良いか難しい。1シートだけなら、商品名でソートすると同じものは近くの行に並ぶから、同じ商品の行が続く間は、販売個数を足していけば良い 1提案として、1ヶ月の売上品目(行数だろう)が数千までなら、12ヶ月を1シートにまとめて(VBAでやる。10行程度、 過去に質問あると思う)、フィルタオプションの設定の、「重複するレコードは無視する」で、売上商品の重複なし、かつ漏れの無い一覧を出して、 後は、商品名を指定したSAMIF関数・COUNTIF関数を使ってでも合計を出すのがよかろう。 この質問は、まづ、関数で出したいという希望も出るようなタイプだ。 ーーー またはピボットテーブルを勉強して使えないかやってみることだ。これが質問者が一番先にやることかな。 「統合」というエクセルの機能もある。これも使えないか勉強してみたら。 それぞれ、Googleででも照会して勉強することだ。質問者は、ひょっとすると、こういう機能も知らないのではないか。 ーー VBAは、このコーナーの数百字の回答でわかるほど、そんなにやさしいものではないよ。 丸投げして、コードを書いてくれというのは、遠慮すべきだ。
- n-jun
- ベストアンサー率33% (959/2873)
勉強という意味でなら。 Excel(エクセル) VBA入門:Dictionaryオブジェクトを利用する http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_dictionary.html こちらが参考になるのでは?
- kyrs21
- ベストアンサー率20% (1/5)
本当にマクロが必要でしょうか? 品目がどれくらいあるのか つくりあげてものをどの頻度で修正しなければいけないか? ということを考慮しないと行けません。 マクロを作って運用すると、またマクロを作るためにどんどん労力を費やす必要がでてくるからです。 いろいろと対応できるとおもいますが関数でも可能です。 添付されている表程度であれば、あいている列に目的の商品だったら金額を入れるというような数式を入れ、 その列のそう合計をとればマクロを作らなくても目的は果たせます。 目的がマクロを作ることであれば、 出力はどうするのか?新たなシート?どこかのセル?別のファイル?ダイアログに出力でいいのか? など重要な情報が抜けているようです。
- pentium100
- ベストアンサー率45% (689/1517)
マクロは必要ありません。 集計機能を使用してください。 http://allabout.co.jp/gm/gc/297711/