出産前後の痔にはご注意!

エクセルで重複している行(会社名)を統合して、
一つに集計したい。

各年度ごとの売り上げ数を集計したいのですが、
データ数が多く(全部で5000件ほど)手作業では困難なため
良い方法があれば教えてください。

「【エクセル】重複している行を統合し、値を」の質問画像

A 回答 (5件)

ピボットテーブルを使えばいいだけだと思います。

    • good
    • 1

こんばんは!



VBAでの一例です。
おそらくないとは思いますが・・・
A列重複会社に同じ商品が重複していても対応できるようにしてみました。

元データはSheet1にあり、Sheet2に表示するとします。
標準モジュールにしてください。

Sub Sample1()
Dim i As Long, lastRow As Long, lastCol As Long
Dim c As Range, myRng As Range, wS As Worksheet
Set wS = Worksheets("Sheet2")
Application.ScreenUpdating = False
wS.Cells.Clear
With Worksheets("Sheet1")
If .Range("A1") = "" Then
.Range("A1") = "ダミー"
End If
.Range("A:A").AdvancedFilter Action:=xlFilterCopy, copytorange:=wS.Range("A1"), unique:=True
lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row
lastCol = .Cells(2, Columns.Count).End(xlToLeft).Column
Range(.Cells(1, "B"), .Cells(2, lastCol)).Copy wS.Range("B1")
Set myRng = Range(wS.Cells(3, "B"), wS.Cells(lastRow, lastCol))
With myRng
.Formula = "=SUMIF(Sheet1!$A:$A,$A3,Sheet1!B:B)"
.Value = .Value
End With
For Each c In myRng
If c = 0 Then
c.ClearContents
End If
Next c
If .Range("A1") = "ダミー" Then
.Range("A1") = ""
wS.Range("A1") = .Range("A1")
End If
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub

※ データ変更があるたびにマクロを実行する必要があります。m(_ _)m
    • good
    • 0

文字通り統合機能でもできそうですね。

    • good
    • 1

何のことはない、お茶の子です。


1.「0;;」に書式設定した Sheet2!B3 に次式を入力して、此れを右端まで
 ̄ ̄ズズーッとオートフィル
 ̄ ̄ =SUMPRODUCT((Sheet1!$A$3:$A$5000=$A3)*(Sheet1!B$3:B$5000))
2.範囲 B3:M3 のフィルハンドルを「エイヤッ!」とダブルクリック
    • good
    • 0

会社名をクリックして、データ 並べ替え (昇順でも降順でもよい)



データ - 小計
グループの基準 : 会社名
集計するフィールド 商品のすべて(会社名を除くすべて)
OK (小計機能を戻すときは[すべて削除])

画面左にできたグループナンバー[2]をクリック

場合により
A2セルクリック [Ctrl]+[Shift]+[*]
[Alt]+[;]
[Ctrl]+[C]

別のシートなどに貼り付け[Ctrl]+[V]
「【エクセル】重複している行を統合し、値を」の回答画像1
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています

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

Qエクセル 数式を教えてください!

エクセルの数式を教えてください!

エクセルでタイムカードを作成しているのですが、休憩時間が2枠ある場合(①通常時間帯②深夜時間帯)の各時間(拘束時間・労働時間・日勤時間・通常残業・深夜
時間・深夜残業)の算出数式が分かりません。

画像のように、休憩時間は①通常時間帯と②深夜時間帯(22:00~5:00)の2枠あり、それぞれ合計時間を数値で入力します。
各時間帯の休憩時間がそれぞれ、
・拘束時間・労働時間・日勤時間・通常残業・深夜時間・深夜残業に反映させるようにしたいのですが、休憩が2枠あるため数式がうまくいきません。。

深夜帯(深夜時間・深夜残業)は22:00~5:00で、1日の労働時間が8時間を超えた場合に残業となります。

画像のように、【拘束時間・労働時間・日勤時間・通常残業・深夜時間・深夜残業】に適切な数値(出勤退勤はh:mmで入力し、その他は15分=0.25単位の数値)で計算されるようにしたいです!

賢者の皆様、どうか宜しくお願い致します!

Aベストアンサー

ANo3です。

>15分を0.25と数値で計算させる方法がわからないので
シリアル値は1日が1.0となるように計算しています。

シリアル値の時間をTとするなら
 =HOUR(T)+MINUTE(T)/60
とすることで、時間単位(15分は0.25時間)に該当する値を得られます。
例えば、3:15 → 3.25 となります。

上記の1日=1.0(1日=24時間)を利用すれば、もっと簡単に
 =T*24
とすることでも、同様の結果を得ることができます。

※どちらの場合も、表示書式は「数値」や「標準」としておく必要があります。

Qエクセルの使い方ってどこで習いましたか?

学校では習いませんよね?

Aベストアンサー

私も独学です。
解らないのはネット検索で結構見つかりますので助かっています。(笑)

QExcel 2段組み

縦長の表を2段組みとしたいのですが、下記の条件があります。
Excelで作成することは可能でしょうか。
可能でしたら方法を教えていただけないでしょうか。
よろしくお願いいたします。

①縦長の表を2段組みとしたい。
②表内で並び替えが可能としたい。
③2段組み内の1段の行を削除した場合に空きが出た1段部分に
2段部分のデータが自動で繰り上がるようにしたい。
(例えば2017年1月を削除した場合に2017年8月が自動で繰り上がるようにしたい。)



子供が小さいのでご連絡が遅くなる可能性がありますが、ご回答いただけた方には必ずお返事を致します。
よろしくお願いいたします。

Aベストアンサー

こんばんは!

① は画像のような配置ではなく、最初はA~F列だけにデータが羅列してある。
というコトですよね?
それをA~F列は7か月分だけにし、残りはG~L列に移動させたい!という解釈です。

② の「表内での並び替え」とはどの列がキーになるかが判りません。
これに関しては手作業で範囲指定 → 並び替え というコトが可能だと思いますので、今回はスルーします。

③ は仮にA~F列の1か月分(複数ヶ月でも)データを消去した場合にA~F列は上詰め、
G~L列は上詰めした月数分を繰り上げてA~F列に移動させる!という解釈です。

VBAになりますが一例です。
↓のSample① が「①」、Sample③ が「③」のコードになります。

Dim i As Long, cnt As Long
Dim lastRow1 As Long, lastRow2 As Long
Dim myRng1 As Range, myRng2 As Range
Sub Sample①()
If WorksheetFunction.CountIf(Range("A:A"), "小計") > 7 Then
Range("A1").Resize(, 6).Copy Range("G1")
lastRow1 = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow1
If Cells(i, "A") = "小計" Then
cnt = cnt + 1
If cnt = 7 Then Exit For
End If
Next i
Range(Cells(i + 1, "A"), Cells(lastRow1, "F")).Cut Cells(Rows.Count, "G").End(xlUp).Offset(1)
lastRow1 = 0
cnt = 0
End If
End Sub

Sub Sample③()
If WorksheetFunction.CountIf(Range("A:A"), "小計") < 7 Then
lastRow1 = Cells(Rows.Count, "A").End(xlUp).Row
lastRow2 = Cells(Rows.Count, "G").End(xlUp).Row
For i = 2 To lastRow2
If Cells(i, "G") = "小計" Then
cnt = cnt + 1
If cnt = 7 - WorksheetFunction.CountIf(Range("A:A"), "小計") Then Exit For
End If
Next i
Range(Cells(2, "G"), Cells(i, "L")).Cut Cells(lastRow1 + 1, "A")
Set myRng1 = Range(Cells(2, "A"), Cells(lastRow1, "A")).SpecialCells(xlCellTypeBlanks)
Set myRng2 = Range(Cells(2, "G"), Cells(lastRow2, "G")).SpecialCells(xlCellTypeBlanks)
myRng1.Resize(, 6).Delete shift:=xlUp
myRng2.Resize(, 6).Delete shift:=xlUp
lastRow1 = 0
lastRow2 = 0
cnt = 0
End If
End Sub

※ 「小計」までが各月の最終行と見なしています。
すなわち「小計」の数で行数を決めています。m(_ _)m

こんばんは!

① は画像のような配置ではなく、最初はA~F列だけにデータが羅列してある。
というコトですよね?
それをA~F列は7か月分だけにし、残りはG~L列に移動させたい!という解釈です。

② の「表内での並び替え」とはどの列がキーになるかが判りません。
これに関しては手作業で範囲指定 → 並び替え というコトが可能だと思いますので、今回はスルーします。

③ は仮にA~F列の1か月分(複数ヶ月でも)データを消去した場合にA~F列は上詰め、
G~L列は上詰めした月数分を繰り上げてA~F列に移動...続きを読む

Qエクセル2016 にてご質問をお願いいたします。

シート1、シート2、シート3が3個あります。

全てのシートのA1セルに同じ文字や数字を入れたいと思っております。

シート1でA1セルに入力したものがシート2、シート3も同じ数字になる。
シート2でA1セルに入力したものがシート1、シート3も同じ数字になる。

どのページでA1の文字を入力や修正を行うとすべてのシートが同じになるようにしたいです。

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

Aベストアンサー

「ThisWorkbook」モジュールのWorkbook_SheetChangeイベントプロシジャに下記のコードを書いちゃうってのは、いかがでしょう。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, Sh.Range("A1"))
If r Is Nothing Then Exit Sub
Application.EnableEvents = False
Select Case Sh.Name
Case "Sheet1"
Sheets("Sheet2").Range("A1").Value = r.Value
Sheets("Sheet3").Range("A1").Value = r.Value
Case "Sheet2"
Sheets("Sheet1").Range("A1").Value = r.Value
Sheets("Sheet3").Range("A1").Value = r.Value
Case "Sheet3"
Sheets("Sheet1").Range("A1").Value = r.Value
Sheets("Sheet2").Range("A1").Value = r.Value
End Select
Application.EnableEvents = True
End Sub

「ThisWorkbook」モジュールのWorkbook_SheetChangeイベントプロシジャに下記のコードを書いちゃうってのは、いかがでしょう。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, Sh.Range("A1"))
If r Is Nothing Then Exit Sub
Application.EnableEvents = False
Select Case Sh.Name
Case "Sheet1"
Sheets("Sheet2").Range("A1").Value = r.Value
Sheets("Sheet3").Range("A1").V...続きを読む

Qエクセル データ抽出の数式

お世話になります。
表①からリスト①に載っている人だけのデータを数式を使って抽出したいです。
(フィルタを使わないで、極力手作業にならない方法で)
表①は、スタッフ数百名分の全データとして、リスト①は、ある部署のスタッフとします。


表①
氏名 日付 ログイン ログオフ
田中 舞妓 2017/5/16 8:25 17:35
田中 舞妓 2017/5/17 8:18 17:35
田中 舞妓 2017/5/18 8:15 17:35
田中 舞妓 2017/5/19 8:29 17:34
田中 舞妓 2017/5/22 8:16 17:33
三田 建造 2017/5/23 8:18 17:39
三田 建造 2017/5/25 8:29 17:38
三田 建造 2017/5/26 8:02 17:31
三田 建造 2017/5/29 8:24 17:32
三田 建造 2017/5/30 8:22 17:33
牧 重三 2017/5/31 8:29 17:31
牧 重三 2017/6/1 8:17 17:35
牧 重三 2017/6/2 8:18 17:41
牧 重三 2017/6/5 8:19 17:31
牧 重三 2017/6/6 8:18 17:41
長岐 知美 2017/6/7 8:29 17:34
長岐 知美 2017/6/8 8:18 17:36
長岐 知美 2017/6/9 8:15 17:34
長岐 知美 2017/6/12 8:29 17:32
篠田 亜紀 2017/5/21 8:16 17:32
柿田 輝未 2017/5/28 8:18 17:17
荒元 耕平 2017/6/4 8:22 17:32
佐田 容子 2017/6/11 8:21 17:46
藤島 澄人 2017/6/12 8:24 17:59
藤島 澄人 2017/6/13 8:22 17:41
藤島 澄人 2017/6/14 8:29 17:28
藤島 澄人 2017/6/15 8:23 17:30
藤田明則 2017/5/16 8:29 17:34
藤田明則 2017/5/17 8:26 18:15
藤田明則 2017/5/31 15:30 0:36


リスト①
田中 舞妓
牧 重三
藤島 澄人
藤田明則

[完成]
氏名 日付 ログイン ログオフ
田中 舞妓 2017/5/16 8:25 17:35
田中 舞妓 2017/5/17 8:18 17:35
田中 舞妓 2017/5/18 8:15 17:35
田中 舞妓 2017/5/19 8:29 17:34
田中 舞妓 2017/5/22 8:16 17:33
牧 重三 2017/5/31 8:29 17:31
牧 重三 2017/6/1 8:17 17:35
牧 重三 2017/6/2 8:18 17:41
牧 重三 2017/6/5 8:19 17:31
牧 重三 2017/6/6 8:18 17:41
藤島 澄人 2017/6/12 8:24 17:59
藤島 澄人 2017/6/13 8:22 17:41
藤島 澄人 2017/6/14 8:29 17:28
藤島 澄人 2017/6/15 8:23 17:30
藤田明則 2017/5/16 8:29 17:34
藤田明則 2017/5/17 8:26 18:15
藤田明則 2017/5/31 15:30 0:36

お世話になります。
表①からリスト①に載っている人だけのデータを数式を使って抽出したいです。
(フィルタを使わないで、極力手作業にならない方法で)
表①は、スタッフ数百名分の全データとして、リスト①は、ある部署のスタッフとします。


表①
氏名 日付 ログイン ログオフ
田中 舞妓 2017/5/16 8:25 17:35
田中 舞妓 2017/5/17 8:18 17:35
田中 舞妓 2017/5/18 8:15 17:35
田中 舞妓 2017/5/19 8:29 17:34
田中 舞妓 2017/5/22 8:16 17:33
三田 建造 2017/5/23 8:18 17:39
三田 建造 20...続きを読む

Aベストアンサー

こんばんは!

VBAになりますが、一例です。
↓の画像のように元データはSheet1にあり、
Sheet2のA列2行目以降に「リスト」を入力 → C~F列に表示するとします。

標準モジュールにしてください。

Sub Sample1()
Dim i As Long, lastRow As Long, wS As Worksheet
Dim myStr As String, myAry As Variant
Set wS = Worksheets("Sheet2")
lastRow = wS.Cells(Rows.Count, "C").End(xlUp).Row
If lastRow > 1 Then
Range(wS.Cells(2, "C"), wS.Cells(lastRow, "F")).Clear
End If
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
myStr = myStr & wS.Cells(i, "A") & ","
Next i
myAry = Split(myStr, ",")
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("A1").AutoFilter field:=1, Criteria1:=Array(myAry), Operator:=xlFilterValues
If .Cells(Rows.Count, "A").End(xlUp).Row > 1 Then
Range(.Cells(2, "A"), .Cells(lastRow, "D")).SpecialCells(xlCellTypeVisible).Copy wS.Range("C2")
End If
.AutoFilterMode = False
End With
End Sub

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

こんばんは!

VBAになりますが、一例です。
↓の画像のように元データはSheet1にあり、
Sheet2のA列2行目以降に「リスト」を入力 → C~F列に表示するとします。

標準モジュールにしてください。

Sub Sample1()
Dim i As Long, lastRow As Long, wS As Worksheet
Dim myStr As String, myAry As Variant
Set wS = Worksheets("Sheet2")
lastRow = wS.Cells(Rows.Count, "C").End(xlUp).Row
If lastRow > 1 Then
Range(wS.Cells(2, "C"), wS.C...続きを読む

Q【Excel】右上がりの罫線を引く

セル「M10」に”無”と入力されると、セル「M11」のセルに右上がりの罫線を引きたいです。
どうぞよろしくお願いいたします。

Aベストアンサー

こんにちは!

VBAになりますが、一例です。
シートモジュールにしてください。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$M$10" Then
With Range("M11").Borders(xlDiagonalUp)
If Target = "無" Then
.LineStyle = xlContinuous
Else
.LineStyle = xlNone
End If
End With
End If
End Sub

※ 対象セルはM10だけでよいのですよね?m(_ _)m

Qエクセル Sheet1の数字入力後、移動のスイッチを押すとSheet2に移動すると・・・

来月、ボウリング大会があり、我々が使っているボウリング場で以前、集計ができなくなるトラブルに見舞われ、大変パニクった経験があります。
そこで、ボウリング場とは別に、我々の方でも集計できるよう、集計表の作成を頼まれたのですが、エクセルで、Sheet1に12列(左から、名前、ゲーム1、2、3、前半ボーナスポイントこれは人によっては無い場合があり、その場合0入力とします。)、前半合計、ゲーム4、5、6、後半ボーナスポイント(前半のものと同じ)、トータルスコア、順位(トータルスコアに連動で、あくまで上から順位の表示はバラバラです。))、40行(参加者の名前分)の表を作り、関数を使って合計や、右端の列に順位を出せるようにしました。
こののち、表の下に移動用の矢印スイッチをつくり、Sheet2に移動するところまでは作れましたが、問題は、Sheet2に移動後、先程のSheet1のデータから、1列目に順位を1位から順番に40位まで表し、その右、2列目に名前、さらにその右、3列目にスコアを 例えば、可能なら、スコア(136点(前半合計)/160点(後半合計)/296点(トータルスコア)といったように自動で表示できるようにしたいのですが、いろいろ調べましたが、分かりません。
今後、ここでしっかり作っておいて、毎年の大会の集計係の人に、少しでも苦労を掛けないようにしてあげたいのです。
皆様のお知恵をお借りしたいです。
どうぞ宜しくお願いいたします。

来月、ボウリング大会があり、我々が使っているボウリング場で以前、集計ができなくなるトラブルに見舞われ、大変パニクった経験があります。
そこで、ボウリング場とは別に、我々の方でも集計できるよう、集計表の作成を頼まれたのですが、エクセルで、Sheet1に12列(左から、名前、ゲーム1、2、3、前半ボーナスポイントこれは人によっては無い場合があり、その場合0入力とします。)、前半合計、ゲーム4、5、6、後半ボーナスポイント(前半のものと同じ)、トータルスコア、順位(トータルスコアに連...続きを読む

Aベストアンサー

こんにちは!

Sheet1には「後半合計」という項目はないのですね?
やり方だけ・・・

Sheet1は↓の画像のような配置になっているとします。
L列の「順位」は「TOTALスコア」(K列)のランク関数で表示しています。
尚、同順位があっても対応できるようにしてみました。

Sheet2のA2セルに
=IFERROR(SMALL(Sheet1!L:L,ROW(A1)),"")

B2セルに
=IF(A2="","",INDEX(Sheet1!A$1:A$50,SMALL(IF(Sheet1!L$1:L$50=A2,ROW(A$1:A$50)),COUNTIF(A$2:A2,A2))))

配列数式なのでCtrl+Shift+Enterで確定!
※ B2セルだけが配列数式になります。

C2セルに
=IF(B2="","",SUM(OFFSET(Sheet1!B$1:D$1,MATCH(B2,Sheet1!A:A,0)-1,,,3)))

D2セルに
=IF(B2="","",SUM(OFFSET(Sheet1!$G$1:$I$1,MATCH(B2,Sheet1!A:A,0)-1,,,3)))

E2セルに
=IF(B2="","",INDEX(Sheet1!K:K,MATCH(B2,Sheet1!A:A,0)))

という数式をそれぞれ入れ、A2~E2セルを範囲指定 → E2セルのフィルハンドルで下へコピー!
これで画像のような感じになります。

※ 前半ポイント、後半ポイントの列は考慮していません。

※ 「前半合計」の数式はもっと簡単にできますが、
「後半合計」と同じ数式を使うようにしてみました。m(_ _)m

こんにちは!

Sheet1には「後半合計」という項目はないのですね?
やり方だけ・・・

Sheet1は↓の画像のような配置になっているとします。
L列の「順位」は「TOTALスコア」(K列)のランク関数で表示しています。
尚、同順位があっても対応できるようにしてみました。

Sheet2のA2セルに
=IFERROR(SMALL(Sheet1!L:L,ROW(A1)),"")

B2セルに
=IF(A2="","",INDEX(Sheet1!A$1:A$50,SMALL(IF(Sheet1!L$1:L$50=A2,ROW(A$1:A$50)),COUNTIF(A$2:A2,A2))))

配列数式なのでCtrl+Shift+Enterで確定!
※ B2セルだけが配...続きを読む

Qエクセル 論理式

エクセルで

A1*B1が100未満の時は100と表示、そうでないときはそのまま計算
という場合
=IF(SUM(A1*B1)<100,100,SUM(A1*B1))
になると思うんですけど、

この場合、
A1B1に入力データが無い時(計算してほしくないとき)でセル値が空白の場合も100と計算されてしまいますよね。

例えばそれを、
A1*B1が100未満の時は100と表示、そうでないときはそのまま計算、しかしセル値が空白で計算結果が0(100未満該当)のときは計算しないもしくは0と表示。
みたいにする方法はありますか?

Aベストアンサー

=(A1*B1>0)*MAX(A1*B1,100)
または
=IF(A1*B1,MAX(A1*B1,100),0)

QEXCELで日別に分かれているシートの平日だけ(または特定の曜日だけ)の合計を出したい

よろしくお願いいたします。
集計表1708.xlsxファイル、シートが「1、2、3…31」となっており、それぞれのシートの中に
A1…日付
A2…weekday関数でA1を参照(月曜日を1とする)
A4…a時間
A5…b時間
A6…c時間

B4…a時間の値(数値)
B5…b時間の値(数値)
B6…c時間の値(数値)
となっております。
1日から31日までに取得した時間が入っておりますが、
①平日のみ
②土曜日のみ
③土日祝のみ(祝日はweedkayのところでifを追加し、祝日の場合は値1を表示)
の数値を「まとめシート」で取得したいのです。
なお、入っている数値等の位置は変わることはありません。(串刺しをしてみたのですがうまくいきませんでした)

無理というのであればあきらめるのですが、詳しい方がいらっしゃいましたらご教授頂けますと助かります。なお、weekday関数を使っていますが、使用しなくても大丈夫です。
どうぞよろしくお願いいたします。

Aベストアンサー

No.1です。

いずれにしても関数や串刺し計算では難しいと思いますので、
↓の画像のような配置でのVBAにしてみました。
左側が各日のシートで右側が「まとめシート」とします。

尚、各日のB2セルは単純にWEEKDAY関数で
=WEEKDAY(A1)
とし、日曜日始まりとしています。
(祝日に関しては処理していませんが、数式などで「1」になるようにしてください)
標準モジュールです。

Sub Sample1() '//この行から//
Dim i As Long, k As Long, wS As Worksheet
With Worksheets("まとめシート")
.Range("B2:D4").ClearContents
For k = 1 To Worksheets.Count
Set wS = Worksheets(k)
If wS.Name <> .Name Then
For i = 2 To 4
Select Case wS.Range("B1")
Case 7
With .Cells(i, "C")
.Value = .Value + wS.Cells(i + 2, "B")
End With
Case 1
With .Cells(i, "D")
.Value = .Value + wS.Cells(i + 2, "B")
End With
Case Else
With .Cells(i, "B")
.Value = .Value + wS.Cells(i + 2, "B")
End With
End Select
Next i
End If
Next k
End With
End Sub '//この行まで//

※ どうしても関数で!となると
コツコツIF関数のネストで各シートのB2セルの値を分岐 → 該当セルにプラス!
といった作業になるのではないでしょうか?
そこまでやる気力も体力もありませんが・・・m(_ _)m

No.1です。

いずれにしても関数や串刺し計算では難しいと思いますので、
↓の画像のような配置でのVBAにしてみました。
左側が各日のシートで右側が「まとめシート」とします。

尚、各日のB2セルは単純にWEEKDAY関数で
=WEEKDAY(A1)
とし、日曜日始まりとしています。
(祝日に関しては処理していませんが、数式などで「1」になるようにしてください)
標準モジュールです。

Sub Sample1() '//この行から//
Dim i As Long, k As Long, wS As Worksheet
With Worksheets("まとめシート")
...続きを読む

Qエクセルの式がわかりません、教えてください。

fujillinさん解り易くしました。

報告書を作成する際、入力内容から、A(業務報酬)
とB(預り金)を選ばせようとしていますが、うまく表示されません。どこがいけないのでしょうか?

パターンは4つありますが、
もし、$AP$7="×" ×で(請求書が弊社宛ではなくて)
NOT('!$AL$7="")文字式が空欄じゃなかったら(下請会社名の記載が有ったら)
B =$V$18(預り金)

もし、$AP$7="×" ×で(請求書が弊社宛ではなくて)
NOT('!$AL$7="")文字式が空欄じゃなかったら(下請会社名の記載が無かったら)
この事例はあり得ませんので削除

もし、$AP$7="○" ○で(請求書が弊社宛)
('!$AL$7="")文字式が空欄だったら(下請会社名の記載が無かったら)
A =$V$19(業務報酬)金額的には100%
もし、$AP$7="○" ○で(請求書が弊社宛)
NOT('!$AL$7="")文字式が空欄じゃなかったら(下請会社名の記載が有ったら)
A =$V$19(業務報酬)金額的には50%

を選ばせようとしています。

疑問点の $AT$7=(支払金額)は上記の式に関係ないものとして削除しました。

以下の文書では、もし、$AP$7="×"(請求書が弊社宛ではなくて)で $AT$7=""(支払金額の記載が無かったら)A=$V$19(業務報酬)

もし、$AP$7="○"(請求書が弊社宛で)、,NOT($AL$7==""(下請会社名の記載が有ったら)、A=$V$19(業務報酬)
そうでなければ、B=$V$18(預り金)

=IF(AND($AP$7="×",$AT$7=””),$V$19,IF(OR($AP$7="○",NOT($AL$7="")),'$V$19,$V$18))

改善策1として
=IF($AP$7="×",$V$18,$V$19)を入れてみましたが、
もし請求書が弊社宛では無ければ、預り金、そうでなければ業務報酬

もし、$AP$7="○" ○で(請求書が弊社宛)
($AL$7="")文字式が空欄だったら(下請会社名の記載が無かったら)
A =$V$19(業務報酬)
がうまくいきません。


改善策2として
=IF(OR($AP$7="○",NOT($AL$7="")),$V$18,$V$19)で作成しましたが、間違っていました。
(請求書が弊社宛)または(下請会社名の記載が有ったら)、業務報酬、そうでなければ預り金


パターン例
請求書が弊社宛 請求書が弊社宛じゃない
下請会社有 業務報酬 預り金
下請会社無 業務報酬 -

fujillinさん解り易くしました。

報告書を作成する際、入力内容から、A(業務報酬)
とB(預り金)を選ばせようとしていますが、うまく表示されません。どこがいけないのでしょうか?

パターンは4つありますが、
もし、$AP$7="×" ×で(請求書が弊社宛ではなくて)
NOT('!$AL$7="")文字式が空欄じゃなかったら(下請会社名の記載が有ったら)
B =$V$18(預り金)

もし、$AP$7="×" ×で(請求書が弊社宛ではなくて)
NOT('!$AL$7="")文字式が空欄じゃなかったら(下請会社名の記載が無かった...続きを読む

Aベストアンサー

またしても添付画像が判別できないですけど。
細かく書いても表示される画像は縮小されてしまうので、
それでもわかるように工夫(画像をトリミング;必要な部分以外は切り捨てる)する必要があります。
その方法は質問に関係ないので省きます。

画像のものを憶測で簡略化したものを添付します。
これで式を考えてみます。

私が回答投稿して良い空気なのかわからないけど…

■APが「○」の場合
ALやAYの内容がどうであれ、結果は全て「業務報酬」になります。

これを、IF関数を使って表すと以下のようになります。

=IF(AP="○","業務報酬",【AP="×"の場合の処理】)   …【式1】

これで、条件①~④の場合の処理は完了。

■APが「×」の場合
結果が「業務報酬」と「預り金」のどちらかになります。
どの条件で結果が分岐するのか、見てみると・・・

AYに金額の記入があるか、無い(空欄)かで違います。

これを、IF関数を使って表すと以下のようになります。

=IF(AY<>"","業務報酬","預り金")   …【式2】

これで、条件⑤~⑧の場合の処理は完了。

■合体!

(式1)と(式2)を合体させると、条件①~⑧全てを処理できる式になります。
ではやってみましょう。

=IF(AP="○","業務報酬",【AP="×"の場合の処理】)
   ↓
=IF(AP="○","業務報酬",【式2】)
   ↓
=IF(AP="○","業務報酬",IF(AY<>"","業務報酬","預り金"))   …完成!

※もちろん、「AP」「AY」だけだとセルになっていないので、行番号も加えて下さい。


■疑問
あくまで、私が画像から読み取った条件で考えたのですが

AL(業者名の有無)については、結果表示させるにあたり、条件として不要だと思います。

条件④と条件①の違いは?(画像で判別不可)

条件④と条件⑧は無いパターンとのことでしたので、
データミスでも存在しえないないものと解釈しまして、
敢えてそのようなケースが合った場合のエラー処理などは含めていません。

---------------------
★別解
添付した表を前提条件としての別解を。

条件がいくつもあっても、結果が「預り金」となるパターンは条件⑦、ただ1つのみ。

そこだけをIFで判別します。

=IF(AND(AP="×",AY=""),"預り金","業務報酬")

こんなにシンプルになります。
※もちろん、「AP」「AY」だけだとセルになっていないので、行番号も加えて下さい。

またしても添付画像が判別できないですけど。
細かく書いても表示される画像は縮小されてしまうので、
それでもわかるように工夫(画像をトリミング;必要な部分以外は切り捨てる)する必要があります。
その方法は質問に関係ないので省きます。

画像のものを憶測で簡略化したものを添付します。
これで式を考えてみます。

私が回答投稿して良い空気なのかわからないけど…

■APが「○」の場合
ALやAYの内容がどうであれ、結果は全て「業務報酬」になります。

これを、IF関数を使って表すと以下のようになります...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング