
対象となる、セルは、Sheet1のB1:B1000とSheet2のB1:B255です。
このセルの値を1千倍(*1000)にしたいのです。
計算をおこなわない条件が四つあります。それを下に書きます。
1 未入力("")のセル。
2 文字列(計算してエラーの出る)のセル。
3 数式の書いてあるセル。
4 セルに色のついている(セルA1と塗りつぶしの色が違う)セル。
これは、ある会社の株価が、1千倍になる(株数は千分の一になる)ので、その過去のデータを変えたいのです。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
こんにちは。
maruru01です。以下で出来ます。
対象となるセル範囲は適当に変えて下さい。
Sub Macro()
Dim i As Long
Dim A1Color As Long
'A1の色を取得する
A1Color = Range("A1").Interior.ColorIndex
For i = 1 To 1000
If IsNumeric(Cells(i, 2).FormulaR1C1) Then
If Cells(i, 2).Interior.ColorIndex = A1Color Then
Cells(i, 2).Value = Cells(i, 2).Value * 1000
End If
End If
Next i
End Sub
(ちょっと解説)
FormulaR1C1プロパティを参照すると、セルに数式が入っていればそれを取得し("=RC[-1]*100"とか)、数式が入っていない場合は、セルの値をそのまま取得する。
従って、数値認識出来るかどうかを確認するIsNumeric関数に入れると、数式が入っている場合はFalseを返す。(ちなみに、未入力("")の場合もFalseを返す。)
で、2つ目のIf文で色を判定している。
No.4
- 回答日時:
>If IsEmpty(c) = True Then x = x & 3 これは式の意味がわかりませんでした。
変数が初期化されたかどうかを調べ、結果をブール値で返します。なんのこっちゃ!!
--->セルcがEmptyであればTrueになるわけですから、その時エラーコードを累積している変数xに、この場合のエラーコード3を加えているのです。
>変数が初期化されたかどうかを調べ、結果をブール値で返します。なんのこっちゃ
--->「セルが初期化されたかどうか」というよりも、「何も入力されてなければ」を聞いています。=""と同じでダブって入るかもしれません。そのほかDeleteキーで消した時も、この状態(Empty)になると思います。
>If c.Interior.ColorIndex <> -4142 Then x = x & 5 の「-4142」は、"塗りつぶし無し"だと思いますが
--->普通の色なしセルでMsgBox range("a1").Interior.ColorIndexが-4142になるので
使っただけです。
No.3
- 回答日時:
Sub test01()
Dim c As Range
For i = 1 To 9
x = ""
Set c = Cells(i, 1)
If c = "" Then x = x & 1
If c.HasFormula Then x = x & 2
If IsEmpty(c) = True Then x = x & 3
If IsNumeric(c) = False Then x = x & 4
If c.Interior.ColorIndex <> -4142 Then x = x & 5
c.Offset(0, 1) = x
If x = "" Then
c.Offset(0, 2) = 1000 * (c.Value)
End If
Next i
End Sub
(1)本番ではFor i = 1 To 9の9は最下行の行番号を入れてください。
d=InputBox("最下行?) For i = 1 To dとしても良い。
(2)テストの納得のために、B列にエラーコードを出しています。1と3は同じかもしれない。
(3)1000倍の値はC列に出していますが、
c.Offset(0, 2) の2を適当に変えてください。
(4)色はセルの背景色を対象とし、未設定のコード
以外を聞いています。
(4)テスト的に対象データの入っている列をSheet2のA列にコピーし、全データでテストし、エラーコードを見て、洩れ・余分があれば補足してください。再考します。
(テストデータ)
135 (セル地ブルー)
a4 (文字入力)
1212000
235 (セル地赤)
13 (入力なし)
1352 (式=B1)
13 (入力なし)
1212000 (字体黄色)
13441344000
回答、ありがとうございます。
If c.Interior.ColorIndex <> -4142 Then x = x & 5 の「-4142」は、"塗りつぶし無し"だと思いますが、勉強になります。
If IsEmpty(c) = True Then x = x & 3 これは式の意味がわかりませんでした。
変数が初期化されたかどうかを調べ、結果をブール値で返します。なんのこっちゃ!!
他も色々勉強になりました。
動作は、うまくいきますが、今回は、NO1の方のものを使いたいと思います。
No.2
- 回答日時:
初めまして。
#1さんのご回答でお解りになったのでしたらよろしいのですが、もしお解りにならない時には、コピー&ペーストするだけで貴方様の思い通りの動作をするサンプルマクロを汲んでみたいと思います。ご希望の節は、次の内容を教えて下さい。・千倍するデータが入力されているセル番地
・千倍した答えを表示させるセル番地
お手数をおかけいたしますが、よろしくお願いいたします。
質問を見てもらって、ありがとうございます。
今回は、NO1の方の回答で解決しました。
また、何か有りましたら、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セルをクリック⇒そのセルに入力...
-
貼り付けで複数セルに貼り付けたい
-
エクセルで指定したセルのどれ...
-
EXCEL VBA セルに既に入...
-
枠に収まらない文字を非表示に...
-
数式を残したまま、別のセルに...
-
vba テキストボックスとリフト...
-
(Excel)数字記入セルの数値の後...
-
Excel for Mac使用中ポインタが...
-
Excelで数式内の文字色を一部だ...
-
エクセルの書式設定の表示形式...
-
Excel 例A(1+9) のように番地の...
-
エクセルの一つのセルに複数の...
-
Excelでのコメント表示位置
-
【Excel】 セルの色での判断は...
-
【エクセル】IF関数 Aまたは...
-
エクセル オートフィルタで絞...
-
エクセルのセルの枠を超えて文...
-
EXCELのセルの中の半角カンマの...
-
Excelで、「特定のセル」に入力...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vba テキストボックスとリフト...
-
貼り付けで複数セルに貼り付けたい
-
エクセルで指定したセルのどれ...
-
枠に収まらない文字を非表示に...
-
セルをクリック⇒そのセルに入力...
-
エクセル
-
数式を残したまま、別のセルに...
-
(Excel)数字記入セルの数値の後...
-
エクセル オートフィルタで絞...
-
エクセルの書式設定の表示形式...
-
Excel 例A(1+9) のように番地の...
-
エクセルの一つのセルに複数の...
-
excelの特定のセルの隣のセル指...
-
EXCEL VBA セルに既に入...
-
Excelでのコメント表示位置
-
エクセルのセルの枠を超えて文...
-
【エクセル】IF関数 Aまたは...
-
対象セル内(複数)が埋まった...
-
Excelで数式内の文字色を一部だ...
-
【Excel】 セルの色での判断は...
おすすめ情報