回答編集履歴

7

括弧補足

2019/02/26 06:59

投稿

FKM
FKM

スコア3640

test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  With Sh1
22
22
 
23
- Range("T1").Formula = "=SUMPRODUCT(" & RANGE(startAddr,endAddr) & "/SUM(" & endAddr & ")"
23
+ Range("T1").Formula = "=SUMPRODUCT(" & RANGE(startAddr,endAddr) & ")/SUM(" & endAddr & ")"
24
24
 
25
25
  End With
26
26
 

6

誤字の修正

2019/02/26 06:59

投稿

FKM
FKM

スコア3640

test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
  あと、上のサンプルですが、式が間違っていたので調整しています。
44
44
 
45
- SUMPRODUCTはEXCELの関数なので、`SUMPRODUCT(開始アドレス**:**最終アドレス)`としないといけません。
45
+ SUMPRODUCTはEXCELの関数なので、`SUMPRODUCT(開始アドレス:最終アドレス)`としないといけません。
46
46
 
47
47
  もし(開始アドレス,最終アドレス)として出したい場合は上記のように`RANGE()`をはさみます(VBAの関数なので、こっちは文字列にしてはいけません)
48
48
 

5

表記の強調

2019/02/20 09:31

投稿

FKM
FKM

スコア3640

test CHANGED
@@ -20,13 +20,9 @@
20
20
 
21
21
  With Sh1
22
22
 
23
- Range("T1").Formula = "=SUMPRODUCT(" & RANGE(startAddr,endAddr) & "/SUM(" RANGE(endCol,endAddr) & ")"
23
+ Range("T1").Formula = "=SUMPRODUCT(" & RANGE(startAddr,endAddr) & "/SUM(" & endAddr & ")"
24
24
 
25
25
  End With
26
-
27
-
28
-
29
- calcLoss = result '戻り値
30
26
 
31
27
 
32
28
 
@@ -46,10 +42,10 @@
46
42
 
47
43
  あと、上のサンプルですが、式が間違っていたので調整しています。
48
44
 
49
- SUMPRODUCTはEXCELの関数なので、SUMPRODUCT(開始アドレス:最終アドレス)としないといけません。もし(
45
+ SUMPRODUCTはEXCELの関数なので、`SUMPRODUCT(開始アドレス**:**最終アドレス)`としないといけません。
50
46
 
51
- 開始アドレス,最終アドレス)出したい場合は上記のようにRANGE()をはさみます(VBAの関数なので、こっちは文字列にしてはいけません)
47
+ もし(開始アドレス,最終アドレス)として出したい場合は上記のように`RANGE()`をはさみます(VBAの関数なので、こっちは文字列にしてはいけません)
52
48
 
53
49
 
54
50
 
55
- ややこしいのはエクセルの関数式とVBAの関数式は別物であり、VBAでEXCELの関数式を利用する場合は、文字列と同じ扱いをしないといけないということです。
51
+ ややこしいのはエクセルの関数式とVBAの関数式は別物であり、**VBAでEXCELの関数式を利用する場合は、文字列と同じ扱いをしないといけない**ということです。

4

dim抜けていたので修正

2019/02/20 09:30

投稿

FKM
FKM

スコア3640

test CHANGED
@@ -11,6 +11,8 @@
11
11
  '===========================================  (仕損不良数量/消費数量合計)の加重平均
12
12
 
13
13
 
14
+
15
+ Dim result As Integer
14
16
 
15
17
  Set Sh1 = ThisWorkbook.Worksheets("集計画面")
16
18
 

3

説明の補足

2019/02/20 09:23

投稿

FKM
FKM

スコア3640

test CHANGED
@@ -44,6 +44,10 @@
44
44
 
45
45
  あと、上のサンプルですが、式が間違っていたので調整しています。
46
46
 
47
+ SUMPRODUCTはEXCELの関数なので、SUMPRODUCT(開始アドレス:最終アドレス)としないといけません。もし(
48
+
49
+ 開始アドレス,最終アドレス)で出したい場合は上記のようにRANGE()をはさみます(VBAの関数なので、こっちは文字列にしてはいけません)
50
+
47
51
 
48
52
 
49
53
  ややこしいのはエクセルの関数式とVBAの関数式は別物であり、VBAでEXCELの関数式を利用する場合は、文字列と同じ扱いをしないといけないということです。

2

行ける方法に修正

2019/02/20 09:22

投稿

FKM
FKM

スコア3640

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ```
6
6
 
7
- Sub calcLoss(ByVal startAddr As String,ByVal EndAddr As String )
7
+ Sub calcLoss(ByVal startRow As String,ByVal EndRow As String,ByVal EndCol as String )
8
8
 
9
9
 
10
10
 
@@ -12,27 +12,13 @@
12
12
 
13
13
 
14
14
 
15
- Dim rngN As String
16
-
17
- Dim rngO As String
18
-
19
- Dim Sh1 As Worksheet
20
-
21
- Dim result As Integer '結果
22
-
23
-
24
-
25
- rngN = Range(startAddr, EndAddr).Address '積
26
-
27
- rngO = Range(EndAddr).Offset(, 1).Address '最終列。この辺はあやしい
28
-
29
15
  Set Sh1 = ThisWorkbook.Worksheets("集計画面")
30
16
 
31
17
 
32
18
 
33
19
  With Sh1
34
20
 
35
- Range("T1").Formula = "=SUMPRODUCT(" & rngN & "," & rngO & ")/SUM(" & rngO & ")"
21
+ Range("T1").Formula = "=SUMPRODUCT(" & RANGE(startAddr,endAddr) & "/SUM(" RANGE(endCol,endAddr) & ")"
36
22
 
37
23
  End With
38
24
 
@@ -50,4 +36,14 @@
50
36
 
51
37
 
52
38
 
39
+ 配列の左上(開始地点)、右上(最終行)、左下(最終地点)の引数を取得して、
40
+
53
- ちょっと怪しいとろありますが、こんな感じで関数を作ってはいかがでしょうか。
41
+ こんな感じで関数を作ってはいかがでしょうか。
42
+
43
+
44
+
45
+ あと、上のサンプルですが、式が間違っていたので調整しています。
46
+
47
+
48
+
49
+ ややこしいのはエクセルの関数式とVBAの関数式は別物であり、VBAでEXCELの関数式を利用する場合は、文字列と同じ扱いをしないといけないということです。

1

式の修正

2019/02/20 09:19

投稿

FKM
FKM

スコア3640

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ```
6
6
 
7
- Sub calcLoss(Dim startAddr As String,Dim EndAddr As String )
7
+ Sub calcLoss(ByVal startAddr As String,ByVal EndAddr As String )
8
8
 
9
9
 
10
10
 
@@ -24,7 +24,7 @@
24
24
 
25
25
  rngN = Range(startAddr, EndAddr).Address '積
26
26
 
27
- rngO = Range(EndAddr).Offset(, 1).Address '最終列
27
+ rngO = Range(EndAddr).Offset(, 1).Address '最終列。この辺はあやしい
28
28
 
29
29
  Set Sh1 = ThisWorkbook.Worksheets("集計画面")
30
30