A列に1,000品の商品名、1行目に商品に対する項目がB列~N列にあったとして、それぞれの商品に対する項目には、すべて値があるとは限りません。
それで・・・ご質問ですが・・・
G列の値よりH列の値(ここはすべて値があります)が大きい商品の行すべてを
sheet2へコピーさせたいのですが、そのVBAのコーディングをどなたか教
えてください。
商品名 規格 価格 販売数(1)販売数(2) ・・・・・・
○○○ ココ と ココ を比較して条件に該当したらこの行をsheet2へコピー
○○○ ※条件は、販売数(1)< 販売数(2)
○○○
・
・
・
VBAについては、最近勉強し始めたばかりで初心者です。まだ、どういう風に目的にあわせたコーディングすればよい分かりません。が、困ったことに上記のような処理で、3,500品目を5つのパターンで明日までに処理までにしてくれ!と上司より言われ困っています。丸投げでお願いして申し訳ございませんが、よろしくお願いします。
No.5ベストアンサー
- 回答日時:
一応作ってみました。
他のパターンがあるみたいですが、コードの「***」あたりを修正すれば応用できると思います。
これくらい品目が多くなるとExcelを使っていることの是非を検討する必要があると思いますが・・・。Accessとかデータベースは知ってしまえば簡単ですよ。
'条件に合致したらSheet1→Sheet2に書き出し
Public Sub Cyusyutu()
Dim wk1, wk2 As Worksheet 'Sheet1,2
Dim rg1, rg2 As Range 'Sheet1,2のセルA1
Dim maxRow As Long 'データ行数
Set wk1 = Worksheets("Sheet1"): Set rg1 = wk1.Range("A1")
maxRow = wk1.UsedRange.Rows.Count
Set wk2 = Worksheets("Sheet2"): Set rg2 = wk2.Range("A1")
Dim rw1, rw2 As Long 'Sheet1の行カウンタ
Dim cl As Long '列カウンタ
'*** 抽出 ***
wk2.Cells.Clear 'Sheet2をクリア
With rg1
'表題をコピー
For cl = 0 To 13
rg2.Offset(0, cl) = .Offset(0, cl)
Next
'データを抽出
For rw1 = 1 To maxRow
If .Offset(rw1, 6) < .Offset(rw1, 7) Then '*** 抽出条件 ***
rw2 = rw2 + 1
For cl = 0 To 13 '*** 指定すれば部分項目を抽出 ***
rg2.Offset(rw2, cl) = .Offset(rw1, cl) '書き出し
Next
End If
Next
End With
End Sub
nishi6さんありがとうございます。nishi6さんの回答はよく参考にさせてもらってます。とりあえずyuziroさんの補足にも書いていたんですが、VBEにコーディングしたらウィルスになってしまい。取り急ぎ、VBAを使わずにかたづけてしまいました。やっと終わって先ほど帰ってきました。やっぱりVBAはもう少し勉強してからが良さそうですね。
今、本で勉強しているところです。まだ具体的なコーディングのところまでいってないのですが、すこしづつ仕組みが分かってきたとこです。
もっと勉強して、今度こんな無理難題な事を上司から言われても、軽くこなして見せ付けたいです。
とりあえず今日は、疲れたんで寝ます。おやすみなさい。
あっ!もちろん、作っていただいたプログラムは無駄にはしません!!早速、来週から暇になるんで、試してみます。これも勉強ですよね!
それでは、また何かあったら宜しくお願いします。ありがとうございました。
あっっ!! もうひとつ! Accessとかデータベース?????
気になるアドバイスですねーっ! Accessってこんなことも出来るんですか?ちょっとこの辺も勉強してみまーすっ それとデータベースとは?????
それでは、今度こそおやすみなさい。ZZZ。。。
No.4
- 回答日時:
丸投げ質問に答えるのもどうか?
という向きもありますし、
この上司もどうか?
とも思いますが、一応回答を・・・・
比較的、理解しやすく記述してありますので、
今後のVBA学習の参考にしてください。
Sub Macro1()
Dim I As Integer, J As Integer, 商品数 As Integer
商品数 = 1000
Sheets("Sheet2").Activate
Sheets("Sheet2").Cells.ClearContents
Sheets("Sheet1").Rows(1).Copy
Sheets("Sheet2").Rows(1).Select
ActiveSheet.Paste
J = 0
For I = 1 To 商品数
If Sheets("Sheet1").Cells(I + 1, 7) < Sheets("Sheet1").Cells(I + 1, 8) Then
J = J + 1
Sheets("Sheet1").Rows(I + 1).Copy
Sheets("Sheet2").Rows(J + 1).Select
ActiveSheet.Paste
End If
Next I
End Sub
この回答への補足
yuziroさんありがとうございました。実は、このプログラムをコーディングして保存したら、ウィルスが発見されました。となってしまい一瞬焦りました。
結局アンチウィルスソフトで削除して事なきことを終えたのですが・・・
とりあえず怖くなったんで、今回はVBAはやめました。自分でウィルスを作ってしまったようですね!というより壊れたプログラムをつっくたのでしょうけど・・・
はぁ!VBAってむずかしいですね!でもやっぱり、めんどくさがりの私にとっては、習得したいものです。これにめげずにこれからも勉強します。
また、なにかありましたら宜しくお願いします。
ところで・・・その後の処理として、ウィルスになってしまったファイルを削除してウィルスチェックもして「検出されませんでした」ってでたんですが、これで大丈夫ですよね?
No.3
- 回答日時:
関数でもできそうに思います。
例えば、g2<h2で、シート1のa2にある商品名を、シート2のa2に表示させるとき、このセルに下式を入力。
=if(sheet1!$g2<sheet1!$h2,sheet1!a2,"")
ここで、g2≧h2のとき、何も表示されない状態になります。
このあと、オートフィルターで商品名(a列)を「空白以外」に設定することで、h列がg列より大きいものの一覧表ができると思います。
カーソルを右下にあわせ、ドラッグすることで、コピー可能なはずです。
ま、参考程度に…
No.1
- 回答日時:
それほど複雑な処理ではないので、VBAでなくてもいいのでは?
G列とH列の比較と言うことで、ここではI列に空白の列を挿入しましょう。
で、I列2行には(=H2-G2)として、それをすべてI列にコピーします。
次に、1行目を選択して(どの列でもOK)「データ」の「フィルタ」の「オートフィルタ」を選択します。
すると1行目にプルダウンのメニューが出てきます。
目的のI列のメニューを見て、「オプション」を選びます。
出てきたところの、左上のボックスに「1」、右上は「より大きい」を選び、OKボタン。
すると、この条件を満たすものだけが抽出されているはずです。
後は全部選択してコピーして、Sheet2にペースト。
手作業ですが応用が利くはず。
悩んでないで、すぐ始めないと間に合わないよっ!
pappaさんありがとうございます。とりえずいろいろ考えず、この方法でさっさと片付けました。VBAはもう少し勉強してからにします。
ほんとに悩んでたら終わらないとこでした。とりあえず無事に終わりました。
いっぱい残業つけてきた!あはは・・
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- Visual Basic(VBA) VBAで質問があります 1 2022/10/19 10:32
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) VBAコードで質問があります 2 2022/10/20 15:27
- Visual Basic(VBA) 【VBA】指定した検索条件に一致したら別シートに転記したい 2 2022/03/23 16:14
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Amazon 新規でAmazon商品ページ作成方法について 1 2022/03/28 00:22
- メルカリ メルカリで古着販売、古物商許可証必要でしょうか。 3 2023/02/20 10:42
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- インターネットビジネス ネットショップでトレーディングカードを売ろうと思っているのですが、初めにショップ開設記念で還元率がす 1 2023/08/17 23:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
スマートな関数を教えて下さい。
-
PowerPointで表の1つの列だけ...
-
関数を教えて下さい。
-
エクセルで最初のスペースまで...
-
「B列が日曜の場合」C列に/...
-
2つのエクセルのデータを同じよ...
-
エクセル 時間帯の重複の有無
-
エクセル 文字数 多い順 並...
-
エクセルの項目軸を左寄せにしたい
-
EXCELで 一桁の数値を二桁に
-
エクセルの並び変えで、空白セ...
-
エクセル(勝手に太字になる)
-
50人を数回、グループ分けする...
-
オートフィルターをかけ、#N/A...
-
エクセルで文字が混じった数字...
-
VBAで文字列を数値に変換したい
-
エクセル 同じ値を探して隣の...
-
Excel 別ファイルに自動的に反...
-
エクセルの表から正の数、負の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
エクセル 同じ値を探して隣の...
-
エクセル(勝手に太字になる)
-
「B列が日曜の場合」C列に/...
-
エクセル 文字数 多い順 並...
-
EXCELで 一桁の数値を二桁に
-
Excelで半角の文字を含むセルを...
-
エクセルで文字が混じった数字...
-
エクセルの項目軸を左寄せにしたい
-
Excel、市から登録している住所...
-
エクセルで、列の空欄に隣の列...
-
エクセルの表から正の数、負の...
-
エクセルの並び変えで、空白セ...
-
VBAで文字列を数値に変換したい
-
A列がない・・・A列が非表示に...
-
文字列に数字を含むセルを調べたい
-
50人を数回、グループ分けする...
おすすめ情報