• 締切済み

【Excel VBA】串刺し集計について

Excel VBA初心者です。 串刺し集計について質問させてください。 同じ構成のシートが3つあります。中には数字や文字列が入っています(各シートの同じセルに数字と文字列が入ることは無し)。 串刺しのイメージで数字が入っているセルは合計を、文字列が入っているセルにはどれか1つ(規則もマクロに入れる、例としては○、×、-であれば○など)を合計用の同じセルにいれたいのですが、マクロの組み方をご教授願います。

みんなの回答

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

>マクロの組み方をご教授願います コードそのものを回答者に書けと言うのは、丸投げでこのコーナーの規約違反。丸投げが横行したら、回答者は大変。自分で勉強してコードを作るのが本来のあり方。 ーー 質問も表現が要領を得ない。 3つのシートを(2つで良いと思うが)模擬実例を書くこと。 >中には数字や文字列が入っています こんなこと書く必要はないでしょう。 >各シートの同じセルに数字と文字列が入ることは無し)。 どういう意味?セルには文字列か数字かどちらか入っている? 当たり前。abc123と言うようなのはないということか? しかしこれも文字列だよ。 あるいは、シート1のA2が数字で、シート2のA2が文字列と言うことはないといいたいのか。 ーー 3表は同じ列項目(行項目)構成ではないということか。 >串刺しのイメージで数字が入っているセルは合計を 3シート各々でセル番地単位でやるのか? だから模擬実例が必要なんだ。VBAは(コード例を挙げてほしいのだろうが)行と列の構成がわからないと組めないのだ。 回答者にそこまで推測させて回答させるのは、配慮が足りない。 >規則もマクロに入れる、 とはどういうこと。 優先順位か何かを、プログラムのロジックに入れるということか。それはどういう考えに刷るのか?質問者が決めなきゃ。ルールによっては大変難しい。 == 下記を参考にして、色々考えてみてください。 Sub test01() Dim sh1, sh2, sh3, sh4 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") Set sh3 = Worksheets("Sheet3") Set sh4 = Worksheets("Sheet4") '-- For Each cl In sh1.Range("a1:C10") r = cl.Row: c = cl.Column If IsNumeric(cl) Then '--3セル加算 sh4.Cells(r, c) = cl + sh2.Cells(r, c) + sh3.Cells(r, c) Else '--3セル結合(小生の独断で) sh4.Cells(r, c) = cl & sh2.Cells(r, c) & sh3.Cells(r, c) End If Next End Sub 上記はSheet1の1つのセルについて、数値か文字列で処理を変えている。 Sheet1-Sheet3の同位置セルには、数値と文字列の混合はないとする(加算がエラーになるから)。 文字列の場合、簡単なので、3セルの結合で、ごまかした。優先や組み合わせのロジックは、質問に書いてないし、普通はロジックが複雑になる。質問さガ考え、判らなければ別質問のテーマだろう。 ーー 異なるシートのセルのコードでの表現ぐらい勉強して、質問しているのかな。

全文を見る
すると、全ての回答が全文表示されます。
  • ki-ro-ro
  • ベストアンサー率49% (106/213)
回答No.2

回答ではありません。 「不明な点」 1)エクセルのバージョン 2)表の構成 数字が入ってるセル(B2~B100など) 文字列が入ってるセル(C2~C100など) 「例としては○、×、-であれば○など」ではなく、具体的に何が入るのか。 また、合計用が○、×、-になる条件。 (3つのシートが一致してたら○とか、sheet1~3が○、×、-と一致しなかったらとか。) 明確になれば、優しい人が正確なコードを書いてくれるかもしれません。 私もVBAはド素人ですので、無茶苦茶なものしか書けません。 ※ 足りないコードもあります。と前置きした上で。 数字はA1~A10・文字はB1~B10・sheet1~3にデータがあり、sheet合計用の同じセルに入れれるとして。 sheet1が○でsheet2が×でsheet3が-の時の条件だけ。 Sub test() For i = 1 To 10 goukei = Worksheets("sheet1").Cells(i, 1) + Worksheets("sheet2").Cells(i, 1) + Worksheets("sheet3").Cells(i, 1) Worksheets("合計用").Cells(i, 1) = goukei go = Worksheets("sheet1").Cells(i, 2) + Worksheets("sheet2").Cells(i, 2) + Worksheets("sheet3").Cells(i, 2) If go = "○×-" Then Worksheets("合計用").Cells(i, 2) = "○" Next i End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

セルデータが 数値かどうかは、IsNumeric関数 文字列どうかは、TypeName関数 で調べればよいと思います。 串刺し計算を「マクロの記録」して得られたコードを編集してみました。 Sub tes串刺し計算1()   Dim i As Long   For i = 1 To 3     If TypeName(Sheets("Sheet2").Range("B" & i + 1).Value) = "String" Then       Sheets("Sheet1").Range("B" & i + 1).Value = "○"     ElseIf IsNumeric(Sheets("Sheet2").Range("B" & i + 1).Value) Then       Sheets("Sheet1").Range("B" & i + 1).Value = "=SUM(Sheet2:Sheet4!B" & i + 1 & ")"       Sheets("Sheet1").Range("B" & i + 1).Value = Sheets("Sheet1").Range("B" & i + 1).Value     End If   Next i End Sub

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel2000で条件付きの串刺し計算は可能か?

    タイトル通りなのですが詳細を書きます。 sheet1からsheet100まで全く同じフォーマットの集計 シートがあります。 シートを甲乙丙の3種類に分類するため、各シートのA1セル 、B1セル、C1セルの何れかに数字の「1」を入れてフラグを 立てています。 A2以下のセルには関数等で計算された数値があります。 ここでA1のセルに「1」が入力されているシートのみの数値を 甲合計シート、B1のセルに「1」が入力されているシート のみの数値を乙合計シートにという感じで串刺し算で求め たいのですが、SUMIFではうまくいきませんでした。 甲合計シートのA2セルに関数がおかしいのは承知で =SUMIF(Sheet1:Sheet100!A2,A1=1,Sheet1:Sheet100!A2) と入力してもダメでした。 当方VBAは全く知らないのですが、条件付の串刺し算は 関数では実現できないのでしょうか? VBAでなら可能というのであれば、その方法を教えて いただけませんか?

  • 同フォルダ内の串刺し集計と文字列結合のマクロ作成

    同じフォルダ内に同じ形式のファイルがいくつかあり、ブック間で数値の串刺し集計と、文字列を結合して集計できるマクロの作成がしたいです。 フォルダ内には各所から送付されてくる同一フォーマット書類『(回答)**.xls』が多数あります。 「**」にはそれぞれの部署名が入っており、シート名は『回答』となっています。 各ファイルの『回答』シート F5~F32セルまでには数値が入力されています。 同じく各ファイルの『回答』シート G5~G32セルまでには文字列が入力されています。 これらを同一フォルダ内にある『集計ファイル.xls』の『集計』シートに集計をしたいのです。 F列は数値なので串刺し集計、G列はそれぞれバラバラの文字列のため「,」で区切って文字を結合をしたいと思っています。 (G列イメージ) あああ,XX,○△△,・・・ このようなマクロを同一フォルダ内にある『集計ファイル.xls』に作成することはできるのでしょうか? よろしくお願いいたします。

  • エクセルで串刺し集計で数字の個数を読み取りたいのですが

    ひょっとしたら簡単かもしれないのですが この間から長いこと調べてみているのですがわかりませんので どなたかお教え下さい。 串刺し集計の際に 例えば 31日分のシート(小の月なら30日:30枚のシート) のA:1(シートのセル位置は31枚とも同じ)のセルに数字の0~7迄を入力し(都合で文字扱いに出来ません)その中から最終のシートに 0が何個、1が何個・・・・・・・7が何個と表示するためには 32枚目(小の月なら31枚目)のシートにどういった計算式を入れたらよろしいのでしょうか、宜しくお願いいたします。

  • 串刺し計算(集計)マクロについて

    いつもお世話になっております。 現在、シート間の集計をマクロでする作業を進めていますが、 1シート1企業に対し、 シートのC1にサービス名、D1に金額、E1に成否(入力規則よりリスト化)を記入するセルがあります。 このブックの集計をする場合、各シートのE1に”成”(入力規則よりリスト選択)が入力されたもののうち、集計シートのA1に、各シートのサービス名の割合、B2に合計金額を算出したいのです。 なお、シートは随時追加されて行きます。 どなたかご教示頂きますよう、お願いいたします。

  • 集計用のVBA

    いつもお世話になります。 今回は、VBAを使った、ブック間での集計について教えてください。 現在、担当者別にExcelブックが15人分あります。(ブック名の定義は"ブック2012(担当者名).xlsx") そのブックには、D3~AH49までデータ(空白セルもあります)が記入されてあり、また月別Sheetが12カ月分存在します。 そして、集計用ブックが存在し、上記のブックと全く同じ配置で構成されています(セル、シート共) やりたいこと ・集計用ブックに、担当者ブックの合計を行いたい。 ・集計用ブックに新たなシートを付加し、そこで年度や担当者名を定義したい。また、そのSheetにコマンドボタンを設置し、そのボタンを押すと自動集計が始まるようにもしたい。  *上記の担当者ブック名の年度が変更されたり、担当者が増減しても、A1セルに2013、B列セルに   担当者を記入していけば、そのブックのみの集計を行ってくれる。 以上が、私のやりたい事で、このVBAを教えていただきたいのです。 皆様、どうかよろしくお願いいたします。

  • VBAでの行集計

    VBAでの行集計 いつもお世話になっております 今 マクロでの行集計で困っております。 お力をお貸し下さい m(__)m したいことは B列最終セルを見つけ出し 列の合計を出す 合計を右横最終セルまでコピーする 最終はR列までです そこで下記のマクロで合計は出しました Dim BeforePos As Long BeforePos = Range("B4").End(xlDown).Row Cells(BeforePos + 1, 2).Formula = "=SUM(B4:B" & BeforePos & ")" このセルの数式を右最終列までコピーをしたい それだけのことですがうまくいきません どうかよろしくお願いします

  • 複数のシートの○×記号の串刺し集計

    エクセルで次のような表のデータが1ヶ月分、31日分あり ます。すなわち31枚のシートに同じ表で中の○× の内容が違うデータがあります。 ア イ ウ エ オ (1) ○ × × ○ ○ (2) ○ ○ ○ × × (3) × × ○ ○ ○ (4) ○ × × ○ ○ そして○をゼロ、×を1と数えて、 31枚のシートの○と×を集計して 32枚目のシートに結果を示したい のです。 例えばこんな感じ32枚目のシート に計算結果を表示したいです。 ア イ ウ エ オ (1) 7 4 5 0 0 (2) 8 5 0 2 2 (3) 1 1 0 1 0 (4) 0 0 4 6 8 31枚のシートの○と×を数値に 変換し、それを串刺し集計した いのです。countifは串刺し集計 で使えないようですし、上手い やり方があれば、教えて戴き たいです。 宜しくお願い致します。

  • 【Excel VBA】特定の列で時間を入れているセルだけ合計して数式をセルにいれたい

    Excel VBA初心者です。 特定の列の各セル(B列とします)に時間(数字)、件数(数字)、文字列(○や×)が入っています。 この中でランダムな位置に入っている時間(数字)のみ拾い出し、合計欄(セルB20とします)に「数式(例)=sum(b3,b6,b8,b13,b18)」を入れたいのですが、マクロの組み方がわかりません。上記の特定のセルを抽出するところまではできたのですが。 マクロの組み方をご教授願えますか。

  • COUNTIFでの集計

    ExcelはVer.2003です。 いつも助けて頂いて感謝しております。 集計業務を頼まれたのですが困っております…。 SHEET!Aに数字と文字列にて下の様にA1:Y50まで入っております。       A       B      C      D・・Y 1   7191-03   2242-37   2212-40    5445-52・・ 2   1544-12   2242-01    2212-03    3555-52・・ 3   7190-01    2242-12   2222-40    5445-12・・  :     :      :       :      : 50 7191-03や7190-01が表示形式の標準や数値では表せない為、一部を 文字列としております。 このデータから、右の2桁が同じ数字をカウントしてSHEET!Bの 特定のセルに集計したいのですが、MATCHやRIGHTをネストしても 私ではCOUNTIFやSUMPRODUCTでは式が作れませんでした・・・。 フォーマットを変更したくないので作業列を使わずに試みてるの ですがよい方法はありませんでしょうか?? 最終目的として、-01や-40の合計をSHEET!Bの1つのセルに1つの 関数で集計するのが理想です。 当方、関数はほんの少し理解できますが、VBAは全くわかりません。 どうか宜しくお願い致します。

  • シートを串刺しで抽出したいのですがそれはマクロですか?

    こんにちは。 エクセルの串刺し集計ではなく、串刺し抽出のことでわからないので 教えて下さい。 ・同じブック内に顧客20件のデータが管理されています。 ・1シート毎が1顧客の単価帳になっています。 ・A1に顧客の名前(同じくシート名もこれと同じく顧客の  名前をつけています。) ・抽出したいのは顧客20件の各シートのA50:B53です。 同じブックの新規シートに「A1の顧客名」と(どれを抽出したか わからなくなってしまうから必要なのかな?と思います。) 20シート全ての「A50:B53」を抜き出すことは可能でしょうか? 抜き出したいセル番地は20シート一緒です。 それぞれのシートはA2からA49までの抽出しなくてもいいセルは、  不規則にだらだらと製品名や個々の単価が入力されています。 転職した会社でデータ管理がなされていなくてビックリしています。 とは言え私もマクロなどは経験がなく、なにをしたらできるのかが さっぱり分かりません。 でも確か前の会社ではできていたのに・・・? あれはアクセスだったのかなぁ? などという状態です。 VBAマクロの本を読みあさりましたが よくわかりませんでした。 とっかかりを教えていただければありがたいです。 よろしくお願いします。

このQ&Aのポイント
  • 筆王のインストールについてご質問があります。
  • インストール時に「ファイル名、ディレクトリ名、またはボリュームラベルの構文が間違っています」というエラーメッセージが表示され、文字化けも発生しています。
  • ご利用の製品は筆王Ver.27で、パソコンのOSはWindows11です。
回答を見る

専門家に質問してみよう