• 締切済み

Excelvbaの構文

Xenの回答

  • Xen
  • ベストアンサー率75% (15/20)
回答No.2

サンプルが欲しいのか分からないのですが.... 以下は元のデータシートを直接操作する2例です。 ◆重複するデータ数が少ない場合は以下(合計で後戻りするので次の例より遅い) Sub SubToTal()  Dim i, j As Integer    Range("A1").Activate  i = 1  Do While ActiveCell.Text <> ""   If ActiveCell.Text <> ActiveCell.Offset(1, 0).Text Then    If i > 1 Then     ActiveCell.Offset(1, 0).Activate     Selection.EntireRow.Insert     ActiveCell.Value = ActiveCell.Offset(-1, 0).Text & "計"     For j = -1 To i * -1 Step -1      ActiveCell.Offset(0, 1).Value = ActiveCell.Offset(0, 1).Value + ActiveCell.Offset(j, 1).Value      ActiveCell.Offset(0, 2).Value = ActiveCell.Offset(0, 2).Value + ActiveCell.Offset(j, 2).Value     Next     i = 1    End If   Else    i = i + 1   End If   ActiveCell.Offset(1, 0).Activate  Loop End Sub ◆重複するデータ数が多い場合は以下(合計で後戻りしないので前のより速い) Sub SubToTal()  Dim i  As Integer  Dim LSw As Boolean  Dim TLT(1) As Long    Range("A1").Activate  i = 1  Do While ActiveCell.Text <> ""   LSw = True   Do While LSw    If ActiveCell.Text <> ActiveCell.Offset(1, 0).Text Then     If i > 1 Then      ActiveCell.Offset(1, 0).Activate      Selection.EntireRow.Insert      ActiveCell.Value = ActiveCell.Offset(-1, 0).Text & "計"      ActiveCell.Offset(0, 1).Value = TLT(0) + ActiveCell.Offset(-1, 1).Value      ActiveCell.Offset(0, 2).Value = TLT(1) + ActiveCell.Offset(-1, 2).Value     End If     i = 1     LSw = False     TLT(0) = 0     TLT(1) = 0    Else     i = i + 1     TLT(0) = TLT(0) + ActiveCell.Offset(0, 1).Value     TLT(1) = TLT(1) + ActiveCell.Offset(0, 2).Value    End If    ActiveCell.Offset(1, 0).Activate   Loop  Loop End Sub 両コードともに処理完了するまで「Application.ScreenUpdating」を使用して画面更新を行わないことでもう少し高速化出来ますが初心者にはお勧めしません。 VBAの勉強中とのことなのでコードの説明は省きました。 頑張って調べて下さい。

abc123456
質問者

補足

回答ありがとうございます。 処理結果をみて驚いてます! 私も勉強してXenさんみたいになれたらとおもいます。 あと一つ出きれば教えていただきたいのですが、 例えば FILE1      FILE2  東京        東京  大坂        大坂 大坂府       大坂府知事 大坂城       福岡 大坂府知事     沖縄 福岡 沖縄 こんな2つのFileがあるとします。 これを照合して↓ 東京        東京  大坂        大坂 大坂府        大坂城         大坂府知事     大坂府知事 計         計  福岡        福岡 沖縄        沖縄 と完全に合ってない文字を(大坂の部分は把握してます) 見比べて大坂の部分が共通ならカウントして計をつくる。 またもう一つのFileとも見比べて大坂の部分で入ってない欄があったらスペースを入れて同じ列に計を入れたいんです。 If ActiveCell.Text <> ActiveCell.Offset(1, 0).Text Thenの部分を変えるのは何となく分かるんですが・・・ Likeをつかうんですか? すみませんが知恵を貸して下さい。

関連するQ&A

  • 請求書:複数枚にわたる場合の書き方

    エクセルで作った請求書のテンプレートを使っています。 一番上に「請求書」とあり、 取引先名、当社名住所等、 その下に大きく合計金額を記載します。 その下に請求の内訳を表形式で細かく記載します。 内訳の下には、小計、消費税額、合計金額の欄があります。 一番下に備考欄(空欄)と振込先が記載されています。 内訳欄は十数行あるのですが、今回初めて書ききれなくなってしまいました。 2枚目に書ききれない分を書こうと思いますが、 同じひな形を使っておかしくないんでしょうか? その場合、 上の方の合計金額欄は1枚目のみに記入で2枚目は空欄 内訳下の小計、消費税額、合計金額欄は、 1枚目には小計のみ記入、 2枚目には2枚目の小計と 1枚目・2枚目合計にかかる消費税額と合計額を記入 でいいでしょうか? 相手先(○○御中)や振込先の情報は1枚目、2枚目どちらにも記載されていておかしくないですか? わかりづらい説明ですみませんが、どうぞよろしくお願いします。

  • Excelで、小計欄がある場合の合計欄

    小計欄がある場合の合計は小計を含めた値から、小計欄の額を引き去る必要があります。 しかし、引き去る列の名前を入力せねばならず、大きな表や行方向にも小計欄があると、ますます間違いやすくなります。 そこで、取り敢えずは小計の列や行を非表示にし、縦横の合計を求めること出来ませんか? なおOSはWin8.1、Excelは2013です。

  • ExcelVBAで一定ルールでの行追加

    いつもお世話になっています。 ExcelVBAについて教えて下さい。 以下のような表があったとします。 --|--A--|--B----|--C--|--D--|--E--| -||-性別-|-年代-|-数1-|-数2-|-数3-| 1|---1--|--40--|---5--|--0--|--3--| 2|---1--|--55--|---0--|--1--|--0--| 3|---1--|--60--|---2--|--1--|--0--| 4|---1--|--70--|---3--|--0--|--2--| 5|---1--|--90--|---0--|--1--|--1--| 6|---1--|-100--|---1--|--1--|--0--| 7|---2--|--45--|---4--|--2--|--1--| 8|---2--|--50--|---0--|--3--|--5--| 性別はコード別で、年代は40から100までが5才刻みですが、数(集計された結果)が無い年代は行がありません。 表は元々与えられた物なのですが別に使用するので、数が無くてもすべての年代が入っている表に作り替えたいと思っています。縦横の合計値も同時に出すのと、こういった表を100近く処理しないといけないので、表ごとに抜けている年代を確認して挿入…というのは手間がかかり、また複数のファイルを処理するのでVBAでやった方がよいと思いましたが、自分で書いてみてもうまくいきませんでした。 実現させたい形は以下の通りです。 ・男性  40/45/50/55/60/65/70/75/80/85/90/95/100  ・男性の40から100までの年代ができたら、  100の下に男性の数(縦)の合計値  ・男性の合計の下に、男性と同様に女性  ・女性の100の下に女性の合計値  ・数3の横列に1列追加して、年代別合計と男性と女性の総数 以上なのですが、お助けいただけますと幸いです。 よろしくお願い致します。

  • EXCELでこんな表は可能でしょうか?

    EXCEL2000で「表1」のような表があります。 これを関数を使って「表2」のような形にすることは可能でしょうか? 「表1」の日付は若い順には並んでおらず、同一日に地区の同じもの、違うものが複数件あったりします。 日付は実際には約1ヶ月分あります。 もしどうしても関数で無理ならEXCELVBA、それでも無理ならACCESSでもかまいませんがいづれもVBAは初心者レベルです。 どうぞよろしくお願いいたします。 (表2は宮崎、沖縄がズレて表示されています) ●表1● 地区 町名 日付 ----------------- 宮崎 青島 3/2 熊本 池田 1/27  福岡 宇美 4/1 大分 日田 1/3 佐賀 大浦 2/22 沖縄 糸満 3/2 長崎 佐々 5/5 福岡 前原 4/1 宮崎 飫肥 5/5 ●表2● 日付 | 福岡 佐賀 長崎 熊本 大分 宮崎 沖縄 ------------------------------------------------- 1/3 |             日田 ------------------------------------------------- 1/27 |          池田 ------------------------------------------------- 2/22 |    大浦 ------------------------------------------------- 3/2 |                  青島 糸満 ------------------------------------------------- 4/1 | 宇美    | 前原 -------------------------------------------------   5/5 |       佐々        飫肥 

  • エクセルでページ毎の小計から最終ページで合計を出したい。

    各ページ毎に小計を出し、最終ページにおいて、小計の下に合計を計算するような表があります。 毎回、ページ数の増減があります。 合計にどのような小計の集計の式を作成したら、よいでしょうか? お教えくださいますよう、お願いいたします。

  • エクセル、小計を足して合計を出してくれない

    Excel2002を使っています。 以下の表があります。 支給小計 1516 2456 支給小計 4563 4756 1435  : この支給小計の合計を出そうと、ΣアイコンでSUM関数を使い、 支給小計 1516 2456 3972←SUMで求めた合計 支給小計 4563 4756 1435 10754←SUMで求めた合計  : としました。 そして、SUMで求めた10754の下のセルに、支給総合計を出そうとΣアイコンで求めたところ、合計を足してきてくれません。見当違いのセルを探してしまいます。 SUMの計算式の途中、名前ボックスがROUND~とでます。普通はTODAYが出る?? 多分、表が悪いと思いますが‥‥小計同士を足してきてくれない場合、どんな原因が考えられますか?

  • できるだけ簡単に数値を入力したい

    下のような表があって A列 B列   C列   D2列 社名 管理No 1日  2日 3日~31日 A 001 B 002 小計 M N 小計 Y Z 小計 総計 この場合に「社名」「管理No」「日付」が入力できる表があってそれに連続して入力すれば 上の表に数値が入ってゆくような方法は作成できないでしょうか。 お知恵をお貸し下さい。

  • エクセル関数で・・・

    助けてください。 数量×単価=金額 の表を作成してるのですが、金額欄の合計(小計)を、下の欄で設けているのですが、関数で表示させるとき、なにも数字が入って無い場合に 0 が表示されないようにしたいのですが・・。 sum でやると、なにも数字が入って無い場合 0 が表示されてしまいます。教えてください (*- -)(*_ _) ちなみに 数量×単価=金額 の場合は、金額欄に 0 が表示されないように出来ました。 

  • ExcelVBA 表に空白があれば行単位で詰めたい

    初心者です。 ExcelVBA2007で、A3:G15の表があります。(さらに実際は横にも同じようにI3:O3にもさらに下にも同じような表がいくつかあります) この表は、行ごとに1セットになっています。(例えばA3に分類、B3に商品名・・・G3に数のように) この表の所々に空欄があるのですが、一つの表の中の行がすべて空欄であれば上に詰めていきたいと思っていますがうまくいきません。後、D列には数式が入っているのですが処理がかわってくるのでしょうか?(今後数式を入れない方向に変えようかとも思っています) どうすればよいでしょうか? もしよかったら、同じ表に対する繰り返し処理のスマートな表記があれば教えていただければありがたいです。 申し訳ございませんが、ご教授よろしくお願いいたします。

  • 項目数分レコードにしたい

    テーブルには住所履歴が格納されていて 氏名 履歴1 履歴2 履歴3 ------ ------- ------- ----- aさん 北海道 東京 沖縄 bさん 岩手 東京 cさん 大阪 兵庫 福岡 というデータがある場合、 下のような結果に表示させるSQLを教えてください。 氏名 履歴 ------ ------- aさん 北海道 aさん 東京 aさん 沖縄 bさん 岩手 bさん 東京 cさん 大阪 cさん 兵庫 cさん 福岡 よろしくおねがいします。