今だけ人気マンガ100円レンタル特集♪

 エクセル2000で定期的に部材の出庫表を作成しているのですが、日々、データーが変動し、表が更新されます。

   A   B  C  D  E  F  G
1コード   1  2  3  4  5  6 
2名称   数量 ← ← ← ←
3部材1  10  5   
4部材2  30 24     8
5部材3  25    40 15     23
6部材4      8 15     32
7部材5      9  18
8部材6  20 30  45       45

 上記のような形式で表が作成され、実際はもっと横長の表になります。

 各部材はB3以降に数量が記載され、最右端に合計セルがあります。数値セルの各行に所々、空白セルがあります。(セルには数式は入っていない)
 少しでも表を見やすくしたいので、数値データーセルが連続しているセルの右隣の空白セルに簡単に小計を差し込みたいのですがその方法が分かりません。

 仕方ないので手動にてCTRLキーを押しながら任意の数値セルを選択し、Σで合計していますが、作業が進まず、ミスも出ます。

 上記の表の部材1ですと、B3、C3の合計(小計)15を空白のD3セルに、部材3ならD5、E5の小計55をF5に、部材6ならB8、D8の合計95をE8に表示させたいのです。

過去にもこの質問をしたのですが、VBAでないと出来ないのでしょうか?私はVBAでの記述がよく理解できません。他に簡単に連続する数値セルの合計を右隣の空白セルに表示する方法は無いでしょうか?IF関数等を入れたりしていますが、循環エラーが出たり、上手く行かず、教えていただけませんか?手入力しか無理でしょうか?これで困っています。

A 回答 (3件)

>VBAでないと出来ないのでしょうか


できません。
(1)エクセルの関数は、空白行セルを探し、データがあれば、そのまま、なければ何か式を入れる、ことはできません。式を入れると
元のデータは消えてしまうから、式を入れられません。
別のセルに入れた数式で、元の行の空白セルのあり場所が判っても、その元の行の空白セルに、式を入れられません。
(2)すなわち式を入れるセル以外に、値や式を入れることができません。
(3)ある式を入れるセル自身を参照した式を入れると、循環エラーになります。
ですから、回答者の関数式の巧拙、応用力があるないに関係なく、不可能です。
    • good
    • 0
この回答へのお礼

 imogasiさん、回答有難うございます。手入力でやるしかないというのが分かりました。
 関係部署に折衝して対応を考えて見ます。有難うございました。

お礼日時:2006/01/28 14:49

空白セルは必須なんでしょうか?


0を入力したらブランクに表示するという手はダメですか?

※Excel門外漢のチョットした疑問。
    • good
    • 0
この回答へのお礼

空白セルは元データ表の構成上、発生します。返答有難うございました。

お礼日時:2006/01/28 14:47

真横に小計を出すのは無理かと思います。


(最右端の合計がおかしくなります)
ただ単に小計を見やすくしたいだけなら
連続した数値の右横ではなく、部材の右横に出るようにしてはいかがでしょうか?


   A   B   C  D  E  F ・・
1コード   小計  1  2  3  4 ・・
2名称        数量 ← ← ← ←
3部材1   15 10  5   
4部材2   62 30 24     8
 ・
 ・     
    • good
    • 0
この回答へのお礼

 ご返答有難うございます。部材の右横に出すことは出来るのですが、それだと仕事が進めににくいので真横に出させたら思いました。

 無理なことが他の方の回答で分かりました。どうも有り難うございました。

お礼日時:2006/01/28 15:21

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

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

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

Qエクセルで、ある列に不規則にある「連続した空白セルの最後尾セル」に空白の数を表示したい

エクセル(2003)を使ってます。

下のような表があるとします

   A       B
1  年月日  鈴木太郎
2  2008/1/1   鈴木
3  2008/1/2     
4  2008/1/3   鈴木
5  2008/1/4     
6  2008/1/5     
7  2008/1/6     
8  2008/1/7     
9  2008/1/8   鈴木

      ↓     


   A       B
1  年月日  鈴木太郎
2  2008/1/1   鈴木
3  2008/1/2    1
4  2008/1/3   鈴木
5  2008/1/4     
6  2008/1/5     
7  2008/1/6     
8  2008/1/7    4
9  2008/1/8   鈴木

B2~B9(実際にはB1500くらいまで…)の"鈴木"と"鈴木"の間にある連続した空白セルの
最後尾セルに空白の数を表示したいのです。
※ちなみにB列は同じ名前"鈴木"しか入ってません。

ご指導のほうよろしくお願いします。m(_ _)m

エクセル(2003)を使ってます。

下のような表があるとします

   A       B
1  年月日  鈴木太郎
2  2008/1/1   鈴木
3  2008/1/2     
4  2008/1/3   鈴木
5  2008/1/4     
6  2008/1/5     
7  2008/1/6     
8  2008/1/7     
9  2008/1/8   鈴木

      ↓     


   A       B
1  年月日  鈴木太郎
2  2008/1/1   鈴木
3  2008/1/2    1
4  2008/1/3   鈴木
5  2008...続きを読む

Aベストアンサー

とりあえず、今思い付いた内容を回答します。

「Sheet1」のシートが当質問の変換前の表であるものとします。

・「Sheet2」のシートを準備し、A1セルに下記式を入力後、「Sheet1」にデータがある範囲までA1の式を下及び右にコピーします。
 =IF(Sheet1!A2="","",ROW())

・「Sheet3」のシートを準備し、A1セルに下記式を入力後、「Sheet1」にデータがある範囲までA1の式を右にコピーします。
 =IF(Sheet1!A1="","",Sheet1!A1)

・「Sheet3」のA2セルに下記式を入力後、「Sheet1」にデータがある範囲までA2の式を下及び右にコピーします。
 =IF(Sheet1!A2="",IF(Sheet2!A2="","",Sheet2!A2-MAX(Sheet2!A$1:Sheet2!A1)-1),Sheet1!A2)

・「Sheet3」のA列の書式は、当該の日付形式に設定します。

「Sheet3」のシートが当質問の変換後の表になります。

こんな感じではいかがでしょうか。

とりあえず、今思い付いた内容を回答します。

「Sheet1」のシートが当質問の変換前の表であるものとします。

・「Sheet2」のシートを準備し、A1セルに下記式を入力後、「Sheet1」にデータがある範囲までA1の式を下及び右にコピーします。
 =IF(Sheet1!A2="","",ROW())

・「Sheet3」のシートを準備し、A1セルに下記式を入力後、「Sheet1」にデータがある範囲までA1の式を右にコピーします。
 =IF(Sheet1!A1="","",Sheet1!A1)

・「Sheet3」のA2セルに下記式を入力後、「Sheet1」にデータがある範囲...続きを読む

Qある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?

Excelの関数について質問します。
ある範囲のせるを検索して、その隣のセルの値を取得するという関数を探しています。
なければユーザー定義で作りたいと思っています。
VLOOKUP関数では一番左端が検索されますが、
それをある範囲まで拡張して、
その右隣の値を取得できるようにしたいのです。
どうかお知恵をお貸しください。

Aベストアンサー

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場合によっては、IFをかぶせてCOUNTIFで確認した方が良いかもしれません。
 ex. =IF(COUNTIF(A1:F200,X1)=1,【上記数式】,"えらー")

ちなみに、VBAでやるならこんな感じになるかと。

動作の概要
 【検査範囲】から【検査値】を探し、
 最初にHITしたセルについて、右隣のセルの値を返す。
 ex. =Sample(X1,A1:F200)

'--------------------------↓ココカラ↓--------------------------
Function Sample(ByVal 検査値 As Variant,ByVal 検査範囲 As Range)
 For Each セル In 検査範囲
  If セル = 検査値 Then Exit For
 Next セル
 Sample = セル.Offset(0, 1)
End Function
'--------------------------↑ココマデ↑--------------------------

いずれもExcel2003で動作確認済。
以上ご参考まで。

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場...続きを読む

Qエクセルで条件に一致したセルの隣のセルを取得したい

下のような「得点」という名前のシートがあります。
(「田中」のセルがA1です。)

 [ 田中 ][ 10 ][ 200 ]
 [ 山田 ][ 21 ][ 150 ]
 [ 佐藤 ][ 76 ][ 250 ]
 [ 鈴木 ][ 53 ][ 350 ]

別のシートのA1セルに、「佐藤」と入力すると、

 [ 佐藤 ]

「得点」シートから「佐藤」の列を見つけて、B1、C1に

 [ 佐藤 ][ 76 ][ 250 ]

のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。
「得点」シートでは氏名が重複する事はありません。
IF文を使うと思うのですが、いまいち良く分かりませんでした。

よろしくおねがい致します。

Aベストアンサー

こんにちは!
VLOOKUP関数で対応できます。
IF関数と併用すればエラー処理が可能です。

Excel2007以降のバージョンであれば
B1セルに
=IFERROR(VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0),"")
としてC1セルまでオートフィルでコピー!
そのまま下へコピーすると行が2行目以降でも対応できます。

Excel2003までの場合は
=IF($A1="","",VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0))

としてみてください、m(_ _)m

Qとびとびのセルの足し算をしたい

こんにちは。初歩的なことなのですが・・。例えばセルA1~A10までの縦の足し算だとオートサムでできますよね。本題なのですが、セルがとびとびの場合(といっても規則正しくですが)、例えばA1とA4とA7とA10の合計を計算したい場合、A1+A4+A7+A10という数式を表示したいセルに打ち込んでやればいいと思うのですが、後から追加したい場合、例えばA4とA7の間にセルを追加して、結果A1+A4+A7+A10+A13という式にした場合、1つ位の追加であれば、数式に1つ追加するだけなので簡単なのですが、いくつもある場合、追加忘れをしそうです。各セルは規則正しく2つ置きとか3つ置きとかの条件で、何か良い計算式はありますでしょうか?初歩的なことで申し訳ないのですが、どなたか教えてください。御願いします。

Aベストアンサー

別の列に区分する為のデータ(条件)がある場合は
=SUMIF(条件範囲,条件,集計範囲)で計算できます。
例えばB列に1,2,3,1,2,3の様な物があれば
=SUMIF(B1:B13,1,A1:A13)でA1,A4,A7,A10,A13を合計
条件の1を2に変えれば、A2,A5,A8,A11を合計します。
条件は文字でもOK

区分するデータがない場合は
=SUMPRODUCT((MOD(ROW(A1:A13),3)=1)*(A1:A13))
ROW関数で行数を獲得、MOD関数で3で割った余りを求め
余りが1(1,4,7...)の時その行の値を合計です。
上記と同じで「=1」の1をに変えればA2,A5,A8,A11を合計します。

上記の場合は、行数に関係なく合計できますが
下記の場合は、特定の行だけ離れたセルの合計しかできません。

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QエクセルVBA 不規則な条件に合致する場合

エクセル2002 VBA での質問です。
A列に100~9999の数値データが不規則に存在しており、

105 108 113 114 121 531 553 2160 ・・・・・

のような不規則な値と合致するときに B列の処理をしたい場合のコードはどのように記述しますか?

私は
for MyRow=1 to (最終行)
if (cells(MyRow,1) =105 or cells(MyRow,1) =108 or cells(MyRow,1) =113 ・・・) then
B列の処理
end if
next MyRow

のように If文 のなかで or を用いて全てを記述するかElseif でつなぐ方法しか思いつきません。

抽出対象の値は今後メンテナンスする必要はないのでコード内に記述しても構わないのですが or  や ElseIf を多用するのもどうかと思っています。

※現実には50個ほどの条件での合致を検出したいです。

みなさんならどのように記述されるでしょうか?

Aベストアンサー

作成例:
sub Excelに出来ることはExcelにやらせる()
 dim a as variant
 dim i as long
 a = array(105, 108, 113, 114, 121, 531, 553, 2160)

 range("1:1").insert
 range("A1").resize(1, ubound(a)+1) = a
 with range("B2:B" & range("A65536").end(xlup).row)
  .formula = "=IF(COUNTIF($1:$1,A2),""○"","""")"
  .value = .value
 end with
 range("1:1").delete shift:=xlshiftup
end sub


作成例:
sub マクロの中でゴリゴリやらせる()
 dim a as variant
 dim i as long
 dim j as long
 a = array(105, 108, 113, 114, 121, 531, 553, 2160)
 for i = 1 to range("A65536").end(xlup).row
  for j = 0 to ubound(a)
   if cells(i, 1) = a(j) then
    cells(i, 2) = "○"
    exit for
   end if
  next j
 next i
end sub

作成例:
sub Excelに出来ることはExcelにやらせる()
 dim a as variant
 dim i as long
 a = array(105, 108, 113, 114, 121, 531, 553, 2160)

 range("1:1").insert
 range("A1").resize(1, ubound(a)+1) = a
 with range("B2:B" & range("A65536").end(xlup).row)
  .formula = "=IF(COUNTIF($1:$1,A2),""○"","""")"
  .value = .value
 end with
 range("1:1").delete shift:=xlshiftup
end sub


作成例:
sub マクロの中でゴリゴリやらせる()
 dim a as variant
 dim i as long
 dim j as l...続きを読む

Qエクセルで連続データから、数個飛ばしのデータを抜き取る方法

  A  B
1 a1
2 a2
3 a3
4 a4
5 a5
・・・・・
のような表において、
Bの列にB1=a1、B2=a3、B3=a5
のような2個飛ばしのデータを連続で抜き取る方法はありますでしょうか。
A列が3000行ほどあり手打ち入力がしんどいです。
OFFSET関数を使ってもうまく連続コピーされません。
どなたかご教授願います。

Aベストアンサー

OFFSET関数利用でもよいが、INDEX関数のほうが普通かな。
=INDEX($A$1:$A$100,(ROW()-1)*2+1,1)
100はデータ数が多い場合はデータ行数に変える。
例データ A1:A5
a1
a2
a3
a4
a5
B1に上記。データ数の半数の行数を複写。
結果
a1
a3
a5

Qエクセル 同じ値を探して隣の数値をコピーする

エクセルで以下の作業を簡単にする方法を教えて下さい。

Sheet1の1行目には見出しがあり、A列とB列の2行目から下にデータが入っています。(約200行)
A列     B列
田中    13
山本     8
谷口    11
鈴木    6
佐々木    9
奥村     15




Sheet2のA列1行目から下には別のデータが入っています。(約600行)
A列
太田川
山村
田中
多賀先
鈴木
奥村
幸田




Sheet2のA列のデータと完全一致するデータ(名前)をSheet1のA列から探して、同じ名前があれば、その隣のB列にある数値をSheet2のB列に貼り付ける。
見つからない場合はSheet2のB列は空欄のままです。
Sheet2
A列      B列
太田川     
山村
田中    13
多賀先
鈴木     6
奥村    15
幸田


Aベストアンサー

シート2のB2セルには次の式を入力して下方にドラッグコピーします。

=IF(COUNTIF(Sheet1!A:A,A2)=0,"",VLOOKUP(A2,Sheet1!A:B,2,FALSE))


人気Q&Aランキング