質問編集履歴

3

文章からわかりにくくなるような要素を削除し、伝えたいことだけを書くようにしました。

2020/03/18 05:27

投稿

maru-omochi
maru-omochi

スコア11

test CHANGED
File without changes
test CHANGED
@@ -1,169 +1,61 @@
1
- ### セルの色を変える処理を作りたい
1
+ 【やりたいこと】
2
2
 
3
3
 
4
4
 
5
- 現在C#にてエクセルマクロています
5
+ エクセルのセルの色変えたい。
6
+
7
+  (値が0の時は緑、0より大きい場合は赤、0より小さい場合は青にしたい)
6
8
 
7
9
 
8
10
 
11
+ ・エクセルの空白セルの判定を行いたい。
12
+
9
- セルの色をセルの数字によって変える処を行いたく、選択されているセル=0時は緑、<0の時は青>0の時は赤とする処理を書き
13
+  (由:セルの値が0の時、とすると空白セルも拾ってしめ)
14
+
15
+ ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
16
+
17
+ 【困っている点】
10
18
 
11
19
 
12
20
 
21
+ ・上記【やりたいこと】でも少し触れていますが、空白セルに0が入っているらしく、
22
+
13
- 対象の列のセルには空セルがあります。これは仕様上必ず空セルが生じす。
23
+ if(セルの値==0)と書くとセルのところも拾ってしいま(緑になってしう)
14
24
 
15
25
 
16
26
 
27
+ ーーー
28
+
17
- 数字は飛び飛びで存在し、ループ処理で判定を行っております。
29
+ https://docs.microsoft.com/ja-jp/office/troubleshoot/excel/use-formula-evaluate-blank-cell
18
30
 
19
31
 
20
32
 
33
+ にて
21
34
 
22
-
23
- ### 空セルを読み込んだ時に値が0であると判定されてしまう。
35
+ IF(ISBLANK(対象セル),"blank",IF(対象セル=0,"zero","other")) 
24
36
 
25
37
 
26
38
 
27
- ”セルの値が0の時”
28
-
29
-  の条件コードに到達したきに、空セルが対象になってるのにもかかわらず0判定で緑色にってしまいま
39
+ とい判定方法を使わければけないと見つけした
30
40
 
31
41
 
32
42
 
33
- ### 該当のソースコード
43
+ しかしこれをどうC#側に組み込んでいいかわからず困っています。
44
+
45
+  
46
+
47
+  
48
+
49
+  
34
50
 
35
51
 
36
52
 
37
- var selectedRange = Globals.ThisAddIn.Application.Selection as Excel.Range;
53
+ ーーーーーーーーーーー
38
54
 
39
- var activeSheet = Globals.ThisAddIn.Application.ActiveSheet as Excel.Worksheet;
55
+  
40
56
 
41
- var selectedAreas = selectedRange.Areas as Excel.Areas;
42
-
43
- int selectedRowsCount = selectedRange.Rows.Count;
44
-
45
- //int selectedColumnsCount = selectedRange.Columns.Count;
57
+  昨日この質問を上げた際、わかりにくく読みにくい文章になってしまいまして皆様にご迷惑をおかけいたしました。大変失礼いたしました。
46
-
47
- int secondTimeMoreColunm = 0;
48
-
49
- int secondTimeMoreRow = selectedRowsCount;
50
-
51
- //string checkString = "  ";
52
58
 
53
59
 
54
60
 
55
- //↓選択されているセルの総数(行×列)分のループ処理
56
-
57
- for (int a = 0; a < selectedRange.Count; a++)
58
-
59
- {
60
-
61
- if(activeSheet.Cells[selectedRange.Row,selectedRange.Column].)
62
-
63
- //↓選択されている列が複数の場合の処理。elseの方のループが先に動いて、
64
-
65
- //行カウントが全体の選択セルカウントに越されたとき(2列目)から走るコマンド
66
-
67
- if (a >= selectedRowsCount)
61
+ また丁寧にその旨ご指摘いただいたことに感謝申し上げます。
68
-
69
- {
70
-
71
- if (Convert.ToDecimal(activeSheet.Cells[selectedRange.Row + (a + secondTimeMoreRow) - selectedRowsCount, selectedRange.Column + secondTimeMoreColunm].Value) == 0)
72
-
73
- {
74
-
75
- activeSheet.Cells[selectedRange.Row + (a + secondTimeMoreRow) - selectedRowsCount, selectedRange.Column + secondTimeMoreColunm].Interior.Color = Color.GreenYellow;
76
-
77
- }
78
-
79
- if (Convert.ToDecimal(activeSheet.Cells[selectedRange.Row + (a + secondTimeMoreRow) - selectedRowsCount, selectedRange.Column + secondTimeMoreColunm].Value) > 0)
80
-
81
- {
82
-
83
- activeSheet.Cells[selectedRange.Row + (a + secondTimeMoreRow) - selectedRowsCount, selectedRange.Column + secondTimeMoreColunm].Interior.Color = Color.LightPink;
84
-
85
- }
86
-
87
- if (Convert.ToDecimal(activeSheet.Cells[selectedRange.Row + (a + secondTimeMoreRow) - selectedRowsCount, selectedRange.Column + secondTimeMoreColunm].Value) < 0)
88
-
89
- {
90
-
91
- activeSheet.Cells[selectedRange.Row + (a + secondTimeMoreRow) - selectedRowsCount, selectedRange.Column + secondTimeMoreColunm].Interior.Color = Color.LightSkyBlue;
92
-
93
- }
94
-
95
- }
96
-
97
- //↓選択されているセルの列が単数。または複数でかつ一列目の処理
98
-
99
- else
100
-
101
- {
102
-
103
- if (Convert.ToDecimal(activeSheet.Cells[selectedRange.Row + a, selectedRange.Column].Value) == 0)
104
-
105
- {
106
-
107
- activeSheet.Cells[selectedRange.Row + a, selectedRange.Column].Interior.Color = Color.GreenYellow;
108
-
109
- }
110
-
111
- if (Convert.ToDecimal(activeSheet.Cells[selectedRange.Row + a, selectedRange.Column].Value) > 0)
112
-
113
- {
114
-
115
- activeSheet.Cells[selectedRange.Row + a, selectedRange.Column].Interior.Color = Color.LightPink;
116
-
117
- }
118
-
119
- if (Convert.ToDecimal(activeSheet.Cells[selectedRange.Row + a, selectedRange.Column].Value) < 0)
120
-
121
- {
122
-
123
- activeSheet.Cells[selectedRange.Row + a, selectedRange.Column].Interior.Color = Color.LightSkyBlue;
124
-
125
- }
126
-
127
- }
128
-
129
- if ((a + 1) % selectedRowsCount == 0)
130
-
131
- {
132
-
133
- secondTimeMoreColunm++;
134
-
135
- secondTimeMoreRow = secondTimeMoreRow - selectedRowsCount;
136
-
137
- }
138
-
139
- }
140
-
141
- }
142
-
143
-
144
-
145
- ### 試したこと
146
-
147
-
148
-
149
- いろいろネットで調べまして、Equals(""), Equals(string,"") , .Value == null , .Value == ""
150
-
151
- 等を試してみたのですがだめでした。
152
-
153
-
154
-
155
- なにかセルの表示がされない状態になっている時 のようなまったく別の角度からのアプローチでないといけないのでしょうか。
156
-
157
-
158
-
159
- selectedRange.Length のようなLengthにあたるものはないのでしょうか。VBAだとlenというものがある(?)らしいのですがVSTO(C#)だとなさそうにみえるのです 。。。
160
-
161
-
162
-
163
- わかりにくい質問でしたら申し訳ございません。書き方にこだわりはなく、空セルをスルーできればそれで解決です。0と空セルの区別をつける方法をご教授ください。よろしくお願いいたします。
164
-
165
-
166
-
167
- 追記:https://docs.microsoft.com/ja-jp/office/troubleshoot/excel/use-formula-evaluate-blank-cell
168
-
169
- にてIF(ISBLANK(対象セル),"blank",IF(対象セル=0,"zero","other")) という判定方法を使うと書いてあるのを見つけました。これをC#にてどう組み込んだらいいのでしょうか。これが組み込めれば解決するのでしょうか

2

追記した

2020/03/18 05:27

投稿

maru-omochi
maru-omochi

スコア11

test CHANGED
File without changes
test CHANGED
@@ -161,3 +161,9 @@
161
161
 
162
162
 
163
163
  わかりにくい質問でしたら申し訳ございません。書き方にこだわりはなく、空セルをスルーできればそれで解決です。0と空セルの区別をつける方法をご教授ください。よろしくお願いいたします。
164
+
165
+
166
+
167
+ 追記:https://docs.microsoft.com/ja-jp/office/troubleshoot/excel/use-formula-evaluate-blank-cell
168
+
169
+ にてIF(ISBLANK(対象セル),"blank",IF(対象セル=0,"zero","other")) という判定方法を使うと書いてあるのを見つけました。これをC#にてどう組み込んだらいいのでしょうか。これが組み込めれば解決するのでしょうか

1

×VSだとなさそうにみえる→〇VSTO(C#)としました

2020/03/17 06:38

投稿

maru-omochi
maru-omochi

スコア11

test CHANGED
File without changes
test CHANGED
@@ -156,7 +156,7 @@
156
156
 
157
157
 
158
158
 
159
- selectedRange.Length のようなLengthにあたるものはないのでしょうか。VBAだとlenというものがある(?)らしいのですがVSだとなさそうにみえるのです 。。。
159
+ selectedRange.Length のようなLengthにあたるものはないのでしょうか。VBAだとlenというものがある(?)らしいのですがVSTO(C#)だとなさそうにみえるのです 。。。
160
160
 
161
161
 
162
162