お世話になります。ExcelもOKWaveも初心者となります。表現方法などに不確かさが
あるやもしれませんが、補足もしてまいりますので、よろしくお願い致します。

Excel2003を使用しております。

1.A列の数字を参照し、範囲ごとに1~4の数字を割り当て、その結果をB列に出す。
  ・1~10の範囲は、B列に1
  ・11~20の範囲は、B列に2
  ・21~30の範囲は、B列に3
  ・31~40の範囲は、B列に4
 という感じです。

2.B列に対しC列の数字を乗算し、その結果をD列に出す。

というものを作りたく、ネットで調べIF関数を使用してみました。B列に狙い通りの
数字が出たのですが、何故かB列にC列を掛けても結果は全て「0」になってしまいます。
(文字扱いになってる?)

この様な場合、どの様な関数・計算式を使用すれば良いのか、ご教授ください。

「[Excel]~以上~以下の場合○」の質問画像

このQ&Aに関連する最新のQ&A

A 回答 (6件)

>~以上~以下の場合○


の丸は文字列の○でないらしいね。ややこしい書き方だ。
「値の範囲に応じてコードを振りたい」とでも書くべきだろう。
ーーー
それならVLOOKUP関数のTRUE型の課題でしかない。VLOOKUP関数を思いつかないようでは、エクセル関数の本など
読んだこともないのでは。まずエクセル関数の代表的な50関数ぐらいの本を読んで勉強してからエクセル関数を使うこと。
ーー
Googleで「VLOOKUP関数 TRUE型」出照会すると
http://www.yoshikawa.co.jp/ybs/skilup/ybs0308.htm
http://www.eurus.dti.ne.jp/yoneyama/Excel/kansu/ …
http://okwave.jp/qa/q925839.htmlの私の回答。

1001
2001
・・
千単位のコードを振る例
    • good
    • 0

セルB1に式[=int((A1-1)/10)+1]を設定して、右下の■を下方向にドラッグ

    • good
    • 0

アナタがご質問に添付された画像はExcel2003じゃなく2007以降のスクリーンショットですが,まぁ今回はあまり関係ないので大丈夫です。



ゼロになるのは,計算に使っているセルを間違えている(B列とC列じゃなくB列とF列を計算してたみたいな)ので無い限り,次の条件の場合に起こります。
1.B列で文字を計算している。
 よくある間違い: =IF(A1<10,"1",… のような式を書いている

2.C列で文字を計算若しくは記入している。
  同上,またはセルの書式設定が不適切。

3.D列でわざわざPRODUCT関数を使ってかけ算をしている

【基本的な対処】
実はB列C列は今のままでも,かけ算の式を
D2:
=B2*C2
と書くだけで,かろうじて計算は正しく出てきます。



あとはまぁ,B列の式は
=IF(A2="","",IF(A2<=10,1,IF(A2<=20,2,IF(A2<=30,3,IF(A2<=40,4,5)))))
のように,"1"じゃなく1を計算する式に直しましょう。

#参考
=IF(A2=0,"",INT(A2/10)+1)
でもいいです。

C列も,いま計算式を入れているのか生数字を入れているのか判りませんが,生数字を入れているなら
1.C列を選んで標準の表示形式を付け直す
2.数字の5を必ずもう一回記入し直す

D列も実際には
=IF(A2="","",B2*C2)
という式にします。
    • good
    • 0

今、気がついた。



あなたのワークシート、B列の数値が左に寄っているということは、B列が文字扱いになっているはずです。

だから、結果が「0」になるのです。
    • good
    • 0

私のエクセル2003では、こういう形で目的を達成できました。

(上から順になっています。)

【B列】
=IF(AND(A1>=1,A1<=10)=TRUE,1,"")
=IF(AND(A2>=11,A2<=20)=TRUE,2,"")
=IF(AND(A3>=21,A3<=30)=TRUE,3,"")
=IF(AND(A4>=31,A4<=40)=TRUE,4,"")

【D列】
=B1*C1
=B2*C2
=B3*C3
=B4*C4


「0」の部分が文字扱いになっているなら、数式を一旦消去し、セルの条件を「標準」にしましょう。
「[Excel]~以上~以下の場合○」の回答画像2
    • good
    • 0

こんばんは!


A列数値は40を超えるものはないという前提です。
↓の画像のように表を作成しておきます。
実際は薄い緑の列だけで良いのですが、判りやすくするために未満の列(G列)を入れています。

B2セルに
=IF(A2="","",VLOOKUP(A2,$F$2:$H$5,3,1))

D2セルは単に
=IF(A2="","",B2*C2)

としてB2・D2セルともオートフィルで下へコピーすると
画像のような感じになります。m(_ _)m
「[Excel]~以上~以下の場合○」の回答画像1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q例えば、AさんからGさんまでがA列に縦に並んでいてB列に数字が入っています。B列にある数字の合計をA

例えば、AさんからGさんまでがA列に縦に並んでいてB列に数字が入っています。B列にある数字の合計をA-Gさん別々に出したいんですが簡単なvbaの記述方法はないでしょうか?
お願いします。

Aベストアンサー

こんばんは!

A列のA~Gさんは複数存在しているのでしょうか?
そうであればSUMIF関数で対応できると思いますが、VBAをお望みだというコトですので
一例です。

元データはSheet1にあり、Sheet2に表示するとします。
尚、Sheet1の1行目は項目行でデータは2行目以降にあるという前提です。
標準モジュールにしてください。

Sub Sample1()
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.ClearContents
With Worksheets("Sheet1")
.Range("A:A").AdvancedFilter Action:=xlFilterCopy, copytorange:=wS.Range("A1"), unique:=True
lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row
With Range(wS.Cells(2, "B"), wS.Cells(lastRow, "B"))
.Formula = "=SUMIF(Sheet1!A:A,A2,Sheet1!B:B)"
.Value = .Value
End With
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m

こんばんは!

A列のA~Gさんは複数存在しているのでしょうか?
そうであればSUMIF関数で対応できると思いますが、VBAをお望みだというコトですので
一例です。

元データはSheet1にあり、Sheet2に表示するとします。
尚、Sheet1の1行目は項目行でデータは2行目以降にあるという前提です。
標準モジュールにしてください。

Sub Sample1()
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.ClearContents
With Worksheets("Sheet1")
.Range("A:A...続きを読む

QExcel2013 VBA A列とB列の文字をA列とB列とC列に移動させる方法

A列とB列に文字が入っているのですが、下記のようにA列とB列とC列に文字を移動させたいです。
(A列の数字は必ず奇数のA列に入っています。)
VBAのコードを教えて下さい。

例えば
A1 1  B1 cat
A2 空白 B2 猫
A3 空白 B3 dog
A4 空白 B4 犬
A5 2  B5 whale
A6 空白 B6 クジラ
A7 3  B7 rabbit
A8 空白 B8 ウサギ

とデータがある場合

A1 1  B1 cat  C1 猫
A2 空白 B2 dog  C2 犬
A3 2  B3 whale  C3 クジラ
A4 3  B4 rabbit C4 ウサギ

としたいです。

実際、データは、A5196まであります。

Aベストアンサー

No.1です。

>実際、データは、A5196まであります。

前回のコードは一つずつカット&ペーストしていますので
かなりの時間を要すると思います。
↓のコードに変更してみてください。

Sub Sample2()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Application.ScreenUpdating = False
With Range(Cells(1, "C"), Cells(lastRow, "C"))
.Formula = "=IF(MOD(ROW(),2)=1,B2,"""")"
.Value = .Value
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub

少しは短縮できると思います。m(_ _)m

No.1です。

>実際、データは、A5196まであります。

前回のコードは一つずつカット&ペーストしていますので
かなりの時間を要すると思います。
↓のコードに変更してみてください。

Sub Sample2()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Application.ScreenUpdating = False
With Range(Cells(1, "C"), Cells(lastRow, "C"))
.Formula = "=IF(MOD(ROW(),2)=1,B2,"""")"
.Value = .Value
.SpecialCells(xlCellTypeB...続きを読む

QB列にA列の数字をかけた数字を出したい

B列の各行に3(or2or1)を入力をしたらA列の数字に0.3(2なら0.2,1なら0.1)
をかけて小数点第一以下は切り捨てをするマクロを組みたいのですができません。

例  A5に4581と入力されていてB5に3と入力をしたらB5が1374と変換される

ようにしたいです;どのようなマクロを組めばよいでしょうか。。。
環境はWINDOWSVISTAのEXCEL2007ですm(__)m

Aベストアンサー

>B列の各行に3(or2or1)を入力をしたらA列の数字に…

シート名タブを右クリックしてコードの表示を選ぶ
現れたシートに下記をコピー貼り付ける

private sub Worksheet_Change(byval Target as excel.range)
 dim h as range
 on error resume next
 for each h in application.intersect(target, range("B:B"))
  if h.value = 1 or h.value = 2 or h.value = 3 then
   application.enableevents = false
   cells(h.row, "A") = application.rounddown(cells(h.row, "A") * h * 0.1, 0)
   application.enableevents = true
  end if
 next
end sub

ファイルメニューから終了してエクセルに戻る
A列に数字を準備し、B列に1か2か3を記入する。

>B列の各行に3(or2or1)を入力をしたらA列の数字に…

シート名タブを右クリックしてコードの表示を選ぶ
現れたシートに下記をコピー貼り付ける

private sub Worksheet_Change(byval Target as excel.range)
 dim h as range
 on error resume next
 for each h in application.intersect(target, range("B:B"))
  if h.value = 1 or h.value = 2 or h.value = 3 then
   application.enableevents = false
   cells(h.row, "A") = application.rounddown(cells(h.row, "A") * h * 0.1, 0)
   appli...続きを読む

Qエクセル、B列に入力した数字と対になった数字をC列に表示させたい

B列に21600~21699までの数字を入力したらC列に300プラスされた数字21900~21999を表示させる。同じようにB列に1100~1199までの数字を入力したらC列に800プラスされた数字1800~1899を表示させる。同じくB列に3500~3599までの数字を入力したら、今度は500マイナスの数字3000~3099が表示されるようにしたいのですが、過去の質問の中から探し出せません。下に例を書きました宜しくお願いします。
(例)
    B列      C列
1   21610     21910(B列+300)
2   21685     21985(B列+300)
3    1106      1806(B列+800)
4    1131      1813(B列+800)
 

Aベストアンサー

C1に
=IF(AND(B1>=21600,B1<=21699),B1+300,IF(AND(B1>=1100,B1<=1199),B1+800,IF(AND(B1>=3500,B1<=3599),B1-500,"範囲外")))

これを、C2から下にコピーします。
(範囲外の数値のときは「範囲外」と表示させています)

QエクセルでA列に数字が入力されていて、その数字が10以上のときに、B列

エクセルでA列に数字が入力されていて、その数字が10以上のときに、B列にAあるいはBという文字を交互に入力したい(画像をご参照ください)のですが、関数を用いて自動的に入力できますか。

Aベストアンサー

B1セルには次の式を入力して下方にオートフィルドラッグします。

=IF(A1>=10,IF(MOD(COUNTIF(A$1:A1,">=10"),2)=1,"A","B"),"")


人気Q&Aランキング

おすすめ情報