質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

1066閲覧

VBA sumifで検索値が該当する場合は足したいが、なぜか該当値があるにもかかわらずぬけてしまうところがある。

HaruSh

総合スコア4

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/05/27 07:48

編集2020/05/27 07:54
コード ```### vba worksheetfunction sumifがうまく起動しない。 エクセルマクロのvbaである1ヶ月の歳入歳出表から、項目ごとに分けて、それぞれの総額をだしたかったが、正常に足してくれるところもあれば、できないところもあります。 ### 発生している問題・エラーメッセージ

エラーはでてないですが、正常な値が取得できません。

### 該当のソースコード ```vba Sub sainyu() Dim i As Long Dim n As Long Dim s As Long Dim r As String Dim rng1 As Range Dim rng2 As Range i = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row Set rng1 = ActiveSheet.Range(ActiveSheet.Cells(4, 3), ActiveSheet.Cells(i, 3)) Set rng2 = ActiveSheet.Range(ActiveSheet.Cells(4, 6), ActiveSheet.Cells(i, 6)) For n = 9 To 27 r = ActiveSheet.Cells(n, 9) s = WorksheetFunction.CountIf(rng1, r) If s > 0 Then ActiveSheet.Cells(n, 10) = WorksheetFunction.SumIf(rng1, r, rng2) n = n + 1 End If Next End Sub

試したこと

雑費などが反応しない
字体を変えたが、だめだった。

補足情報(FW/ツールのバージョンなど)

檀家布施などの項目は、ドロップダウンリストで記入している。
ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/05/27 07:58

データ起因に依る可能性が高いので、データも追記された方が良いですね。
HaruSh

2020/05/28 03:07

ご返信ありがとうございます。 画像添付でエクセルのデータを貼り付けようと思ったのすが、””画像添付 開く” まではクリックして反応しますが貼り付けることができません。もしよろしければ教えていただけますでしょうか。
sazi

2020/05/28 03:16

画像では見た目しか確認できませんから、表の形式で当該のデータを追記してみてください。
guest

回答2

0

worksheetfunction.sumifはエクセルが数値として認識しているセルのみを対象に合計されます。
書式設定が文字列になっている。もしくは全角数値のセルが無いか確認してみてください。

データ数によっては上記は現実的ではないかもしれません。
worksheetfunction.sumifを使用した場合、その計算の過程をデバッグできない為、こういった不具合の確認がし辛いです。
よって、この関数を使用せずに1行ずつ足していくように変更した方が良いかもしれません。

そうする事によって、数値が全角になっている場合などはstrconv(値,vbnarrow)で半角に置き換えて加算を行う。などの処理が可能になります。

投稿2020/05/27 12:29

Teppy

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HaruSh

2020/05/28 03:17

ご返信ありがとうございます。 書式設定を見ましたが、問題なさそうです。 データ数は比較的少ないので、大丈夫だとは思うのですが、一行ずつ足していくやり方をよろしければ教えていただけると幸いです。 私も一度worksheetfunctionを使う前に,いろいろ試してみたのですが、私の力不足でうまくできませんでした。 エクセル画面の画像を添付して質問するつもりでしたが、””画像添付 開く”までいって”開く”をクリックしても添付できませんでした。 わかりにくい質問内容でごめんなさい。
Teppy

2020/05/28 10:18

どのようなシートか分かるものを見せてほしいです。 こちらでテストしようと思いましたが、どのようなシートになっているか予想がつきませんでした。 C列とI列は同じ文字列なのでしょうか?←ここで分からなくなりました。 画像の添付が難しければ、使用している列を下記の表現してもらえれば分かるかもしれません。 C列,F列,I列 ID,数量,項目 1,1,項目1 2,9,項目2
guest

0

書式設定を見ましたが、問題なさそうです。

まずは手動で数式を入力して試してみては?
ま、マクロで実行しても手動で試してみても、やることは同じなので、
結果は変わらないと思いますが、違うなら、
セル範囲等、意図した指定ができてないという可能性があります。
同じなら、見た目数値でも、文字列として認識されている可能性があるので、
データの区切り位置で列で一括でセルの書式を標準にしてみてください。
あ、あと、検索の文字も半角全角等ぱっと見でわからない違いがあるかもですね。
後ろに半角スペースとか入ってたり?

文字列を数値に変更する【区切り位置編】

参考までに・・・

ExcelVBA

1Option Explicit 2 3Sub test() 4 Dim rngFind As Range 5 Dim rngSum As Range 6 Dim rngKeys As Range 7 Dim c As Range 8 9 With ActiveSheet 10 Set rngFind = .Range(.Cells(4, "C"), .Cells(.Rows.Count, "C").End(xlUp)) 11 Set rngKeys = .Range("H9:H27") 12 End With 13 Set rngSum = rngFind.Offset(, 3) 14 15 For Each c In rngKeys 16 c.Offset(, 1).Value = WorksheetFunction.SumIf(rngFind, c, rngSum) 17 Next 18End Sub 19 20Sub test2() 21 Dim rngFind As Range 22 Dim rngSum As Range 23 Dim rngKeys As Range 24 Dim f As Range 25 Const cmyFormula As String = "=Sumif(XXXX,YYYY,ZZZZ)" 26 27 With ActiveSheet 28 Set rngFind = .Range(.Cells(4, "C"), .Cells(.Rows.Count, "C").End(xlUp)) 29 Set rngKeys = .Range("H9:H27") 30 End With 31 Set rngSum = rngFind.Offset(, 3) 32 33 f = Replace(cmyFormula, "XXXX", rngFind.Address) 34 f = Replace(f, "YYYY", rngKeys(1).Address(False, False)) 35 f = Replace(f, "ZZZZ", rngSum.Address) 36 37 With rngKeys.Offset(, 1) 38 .Formula = f 39 .Value = .Value 40 End With 41End Sub

量が少ないので大した違いはないかもしれませんが、
個々の計算をいちいちするより、
一括でシートに数式を入れた方が断然処理速度が速いです。

投稿2020/05/28 05:56

編集2020/05/28 05:59
mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問