• 締切済み

エクセル VBA

エクセルVBAを使った方法を教えて頂きたいです。 画像参照※○○は商品名であり、それぞれ異なる名前と仮定 画像のように商品名 個数 単価 合計金額 と分けたいです。最後には消費税とどこに送るかといった形でまとめています。 このような分解する前のデータが約1000件あります。 これをVBAを使ってわけていきたいのです。 画像の通り商品名の後にスペースなしで個数が入ってきたりします。 それから商品名はほぼ毎月固定なので商品名自体のデータはあります。 どうかよろしくお願いします。

  • mthip
  • お礼率13% (12/86)

みんなの回答

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

こんにちは こんな感じでも、 Sub test()   Dim r As Range   Dim t As Range   Application.ScreenUpdating = False   With Range("A1", Range("A" & Rows.Count).End(xlUp).Offset(-2))     .Offset(, 6).Resize(, 4).ClearContents     .Copy Range("G1")   End With   Set t = Range("G1", Range("G" & Rows.Count).End(xlUp))   t.TextToColumns Destination:=Range("G1"), DataType:=xlDelimited, _     TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _     Semicolon:=False, Comma:=False, Space:=True, Other:=True, OtherChar:= _     "個", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _     TrailingMinusNumbers:=True   Columns("H:H").Insert Shift:=xlToRight   Set t = Range("G1", Range("G" & Rows.Count).End(xlUp))   With t.Offset(, 1)     .Formula = "=J1/I1"     .Value = .Value   End With   For Each r In t     r.Replace r.Offset(, 1), ""     r.Offset(, 1) = r.Offset(, 1) & "個"   Next   Application.ScreenUpdating = True End Sub F8キーでステップ実行すれば何をやっているか分かります。 手作業をマクロにしただけみたいなものです。

mthip
質問者

補足

もうしわけありません。 エラーが出まして先に進めませんでした。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

「○○15個650 9,750」ですが、商品名に半角の数字を含まない、という前提条件で、以下のマクロを組みました。 もし、「商品名」に半角の数字を含む可能性のある場合は、おっしゃってください、「商品名」のデータベースから読み込んで、処理をする方法を考えますが、その際は、そのデータベースが具体的にどうなっているのか、教えてください(「A」列の何行目から「商品名」の一覧が入っている、など)。 Option Explicit Sub Test() Dim c, i, j, o, p As Long Dim n, m, q, r, s As String For i = 1 To Range("A1").End(xlDown).Row s = Cells(i, 1).Value c = 0 For j = 1 To Len(s) If Mid(s, j, 1) >= "0" And Mid(s, j, 1) <= "9" Then c = 1 n = Left(s, j - 1) p = InStr(s, "個") m = Mid(s, j, p - j + 1) o = InStr(s, " ") q = Mid(s, p + 1, o - p - 1) r = Mid(s, o + 1) End If If c = 1 Then Exit For End If Next j Cells(i, 7).Value = n Cells(i, 8).Value = m Cells(i, 9).Value = q Cells(i, 10).Value = r Next i End Sub 簡単な説明です。 For i = 1 To Range("A1").End(xlDown).Row 「A」列の一番最後まで処理を行います(途中、空白セルがあった場合、その手前の行が、最終行と判断してしまいます)。 s = Cells(i, 1).Value それぞれの行の「A」列の値(文字)を「s」に代入しています。 For j = 1 To Len(s) 文字列「s」の文字数の分だけ処理を行います。 If Mid(s, j, 1) >= "0" And Mid(s, j, 1) <= "9" Then 1文字ずつ調べて、その1文字が「0」から「9」の間であれば、 n = Left(s, j - 1) 商品名を取得。 p = InStr(s, "個") 「個」という文字が、何文字目にあるか調べています。 m = Mid(s, j, p - j + 1) 個数の取得。 o = InStr(s, " ") 半角スペースが、何文字目か調べています。 q = Mid(s, p + 1, o - p - 1) 単価を取得。 r = Mid(s, o + 1) 合計金額を取得。 Cells(i, 7).Value = n Cells(i, 8).Value = m Cells(i, 9).Value = q Cells(i, 10).Value = r それぞれの値を、それぞれのセルに書き込んでいます。

mthip
質問者

補足

早速のご回答有難うございます。 まず商品名の後にスペースなしで個数が入ってくるかどうか。ですが、これはスペースがあったり、無かったりします。そこの規則性はわかりません。ただ、~個の「~」と「個」の間には必ず半角スペースがあります。 つまりパターン(1)「○○15 個 300 45000」 パターン(2)「○○ 15 個 300 45000」 と、このように○○の後に半角スペースが入る入らないはあります。また、スペースは全て半角で入っています。 商品名のデータは別のシート(シート2と仮定)の1セルに1つずつ入っています。この商品名がシート2に約1000個あります。 まとめますと ・スペースは全て半角 ・商品名の後のスペースはあったりなかったり ・個数には必ず「~ 個」と数字と文字の間にスペースがある ・商品名はエクセルで一個ずつコピペ可能な状態 ・単価と合計金額の間にも必ずスペースがある です。色々言葉足らずで済みません。

関連するQ&A

  • 【難しい】エクセルVBA

    エクセルVBAもしくは関数での回答希望です。 【条件】 A1~Aiには商品名、個数、単価、合計額が入っています。 A1~Aiに記載されてる各情報は半角スペースで区切られていたりいなかったりします。 D列にはA1~Aiで使われている商品名がランダムに全て入っています。 【行いたいこと】 A1~Aiに記載ある情報を、B1~Bi列には商品名をそれぞれ返す。C1~Ci列にはそれ以外を返すというようにしたいです。 つまり、二分割にするということです。 本当は商品、個数、単価、合計で4分割にしたいのですが複雑になりそうなので二分割でお願いします。 どうか方法を教えてください。 ※参考として画像を載せます。あくまで画像は参考程度で、条件としては上記のものでお願いします。

  • EXCELで日付をKEYとしてデータをもってくる方法

    お世話になります。 EXCELで日付をKEYとして、別シートからVLOOKUP等で データをもってきたいのですがその方法についてご教授ください。 具体的には、 シートAに10月の商品受注データが入っていると仮定し、 シートBのどこかのセルに10/1、10/7、と入力することで シートBに10/1-7迄の受注データのみを表示させることができればと 考えています。 ------------------------------- シートA(10月受注データ) 10/1 商品X 個数 単価 10/1 商品X 個数 単価 10/3 商品Y 個数 単価 10/4 商品Z 個数 単価 10/8  商品X 個数 単価 10/10 商品Z 個数 単価  ・  ・  ・ ------------------------------- シートB(10/1~10/7迄の受注データ) 10/1 商品X 個数 単価 10/1 商品X 個数 単価 10/3 商品Y 個数 単価 10/4 商品Z 個数 単価 ------------------------------- ご回答宜しくお願いいたします。

  • エクセルでVBAを使うのかと思うのですが・・・

    エクセルである商品の一覧があります。 それぞれの数量合計を求めたいのですが ひとつの商品が複数行にわたって入力されており その合計を出したいのです。  ABCDEF 1 (1)  5 2 (1)  2 3 (1)  4 4 (2)  3   5 (2)  1 6 (2)  8 7 (3)  9 8 (4)  7 9 (4)  7 上記の表で(1)が合計何個、(2)が合計何個といった感じです。Eは個数です。 (1)は5+2+4=11なので別シートの商品名のみの一覧の(1)の横へ11と入力したいのです。 商品数が数百あり、行も数千あるため自動計算したいと思っています。 ちなみに今は行3の下に行の挿入を行い、セル1E~3Eまでを合計し、別のシートの商品一覧にC&P(値のみ)しています。 これではいつまでかかるか気が遠くなってきます。 VBAの出来る方よろしくお願いします。

  • 計算するExcelマクロを作りたいです

    商品ごとに年度の売り上げを毎月計算するマクロを作りたいです。 Excelブックが添付できないので、文章のみで書きますがご了承 ください。 「データ」ブックでは、列は左から商品単価、通貨、商品ごとの 月別売り上げ個数、(商品別)年度売り上げ合計の順番で並んで います。行は商品の名前です。 別にもう一つ「通貨」ブックがあり、「データ」ブックの通貨で 検索してその右隣の数値を商品単価に掛け算します。さらに、 商品別売り上げ金額の年度合計を毎月計算して、「データ」ブックに 出力するようにしたいです。 どなたかご協力お願いいたします。

  • エクセルの関数で算出したいものがあります。

    ・合計金額が493,520円 ・商品の種類は4種類 ・商品の個数は980個 ・4種類ある商品の単価の差は1~5円程度 ・980個のうち、何がいくつあるかの内訳は、4等分になるべく近い数字にする。 という条件です。 計算式がわからなかったので、電卓片手に、何度も計算したら、偶然いい数字が見つかりました。 合計金額493,520円 個数は980個 商品A の単価は502円、個数は202個 =101,404 商品B の単価は503円、個数は243個 =122,229 商品C の単価は505円、個数は247個 =124,735 商品D の単価は504円、個数は288個 =145,152 今回は、たまたま闇雲に電卓を打ったら、ぴったりな数字が出てきましたが、今後、随時数字を変えて出てくるそうです。 数字が変わる部分は、合計数字・個数です。商品が4種類あることと、単価の差が1~5円程度ということと、個数の内訳の差がなるべく4等分に近い数字だというのが条件です。 答え合わせは、計算のつじつまが合えばいいので、何種類かパターンが選べる場合もあるでしょうが、1つのパターンさえ出れば問題ありません。また確実な正解データがないので、手計算のつじつまが合えばOKです。 説明下手だと思いますが、規則がありそうで、なさそうなものですが、関数で数字が出るようなものは作れますか?教えて下さい。

  • 計算するExcelマクロを作りたいです(2)

    商品ごとに年度の売り上げを毎月計算するマクロを作りたいです。 Excelシートのキャプチャを加えたので、少しわかりやすくなって いるでしょうか? 「データ」シートでは、列は左から商品単価、通貨、商品ごとの 月別売り上げ個数、(商品別)年度売り上げ合計の順番で並んで います。各行には各商品ごとの数値が入力されています。 別にもう一つ「通貨」シート(画像右下)があり、「データ」 シートの通貨で検索してその右隣の数値を商品単価に掛け算します。 さらに、商品別売り上げ金額の年度合計を毎月計算して、最終的に 「データ」シートに出力するようにしたいです。 「データ」シートは毎月更新されるので、マクロ専用のブックを もう一つ作る予定でいますが、可能な内容でしょうか? マクロ自体は、会社の友人が多忙で困っているので、上司との会話 の間にあまり良く考えずに引き受けてしまった話です・・・ 通貨のレートを別のシートから持ってきて計算する辺りが特にわか らず困っています。 どなたかご教授お願いいたします。

  • エクセル VBA ' " ! & の使い方

    エクセル VBA ' " ! & の使い方 VBAを独学で勉強している、超初心者です。 同じシート内でのVBAを作るのはなんとなくできるようになったのですが、別のシートのデータを参照したいときなど、(シート名を変数にしています)うまく動作できません。 ' " ! & の使い方をやさしく解説してください。 よろしくお願いします。

  • 請求書の書き方

    請求書を作成する際には、 ・1種類の商品につき、税込単価×個数で計算し、その合計金額を請求 ・1種類の商品につき、税抜単価×個数で計算し、税抜合計から全体の消費税を足したものを請求 この2つのどちらが正しいのでしょうか?

  • エクセルの表の集計をVBAでやりたいのです。

    エクセルのsheet1にこのような表があります。 A B C D E 1 名称 金額 2 あああああ 10000 3 あああああ 12000 4 あああああ 9000 5 いいいいい 9500 6 いいいいい 11000 7 ううううう 15000 8 えええええ 12000 9 おおおおお 10000 10 おおおおお 14000 11 かかかかか 13000 12 ききききき 800 ・ 以下多数 この表で、それぞれ同じ名称の個数と合計金額を求めたいのです。 たとえば「ああああ」なら個数 3、合計 31000 と、D4とE4に、 「いいいい」なら個数 2、合計 25000 と、D6とE6に入れたいのです。 実際の表はデータ件数が1万件を越えますのでいちいち手で入れるわけにはいきません。 VBAでやるにはどう記述したらいいでしょうか? どうかお助けください。よろしくお願いします。

  • VBAで計算した結果がデータ型により相違してしまいます。VBAに詳しい

    VBAで計算した結果がデータ型により相違してしまいます。VBAに詳しい方、理由を教えてください。よろしくお願いします。 Dim 税率 As Single Dim 売上 As Double 単価=Range("b5").Value:個数=Range("d5").value:税率=Range("f5").Value 売上=(1+税率)*単価*個数 (1)単価=30000、個数=15、税率=0.05と入力すると売上の数値=472500.000335276となります。 (2)売上のデータ型をsingleにした場合は、売上=472500となります。 (3)売上のデータ型Single、税率のデータ型をDoubleとした場合も売上=472500となります。 (1)の結果の小数点以下の数値の意味がわかりません。 よろしくお願いいたします。

専門家に質問してみよう