
No.2ベストアンサー
- 回答日時:
数学の分野ですね。
マクロを使わずとも関数で十分代用可能です。
1,000 と -1,000 を同じとみなすには、絶対値を取るのが普通です。
絶対値を取る関数は ABS になります。
あとはIF関数で二つの値を比較して等しければ "*" を表示させるだけで良いので、
=IF(ABS(1000)=ABS(-1000),"*","")
などでしょうか。
または、数値を二乗してマイナスの符号を消してしまうのも方法です。
二乗は、-1,000*-1,000 でも代用できますし、関数ならば POWER になります。
あとはIF関数で上記と同様に、
=IF(POWER(1000,2)=POWER(-1000,2),"*","")
こんなところでしょうか。
ご回答ありがとうございます。マクロを使わなくてもよさそうなのはわかったのですが、データが混在している中で、値 "a"と"-a"を判断させるには
どうしたらよいでしょうか?宜しくお願いいたします。
No.7
- 回答日時:
すいません、#5でソースコード書いてしまいました。
#4さんのローカルルールの指摘と入れ違いで書いてしまいました。
禁止事項、ネチケットを認識不足ですね、再確認します、失礼しました。
No.6
- 回答日時:
こんにちは。
最近他の方への回答でも書かせてもらいましたが、VBAの知識をお持ちでコードのどこかが解らないとおっしゃるなら、#4さんが仰るようにご自分で検討されたコードを載せるべきだと思います。VBAといえども、プログラムソースは知的財産です。本来ならお金を払って開発を依頼するものだと思います。それをご自分でやられるつもりなら一から人に頼るのはいかがなものでしょうか。
今回のご質問は、同じ列に(A列とします)1,000 と -1,000などのデータが入っており、その中から相殺できないデータを探して未回収とするということで考えて宜しいですか?20,000件という量のデータを探すのは苦労があるとお考えなのは解ります。私なら、B列にABS関数で絶対値を表示させ、C列にはあらかじめ"*"を全てに入力しておきます。その状態でピボットテーブルを作成し、行をB列の絶対値、データをA列の金額の合計にしたら、相殺できない未回収金の絶対値がどれかわかります。オートフィルタでその絶対値の金額を表示させ、手作業でC列の"*"を消していきます。この方法である程度はデータを限定することができるのではないでしょうか。
#7さんの仰る通り、質問の流儀を弁えず失礼致しました。
ご教示頂いた内容を参考にしてやってみます。
貴重なお時間頂きありがとうございました。
No.5
- 回答日時:
こんな感じでしょうか? 全然違っていたらごめんなさい。
相殺イメージがわからなかったので、重複を考慮してみました。
sub test()
'Cells(行数,列数)
Dim kingaku As Double
For i = 1 To 10
kingaku = Cells(i, 1) * -1 ' 1=A
If (Cells(i, 2) = "*") Then ' 既に比較されていた場合
GoTo next_i
End If
For j = i + 1 To 10
If (kingaku = Cells(j, 1)) Then ' 金額の比較
If (Cells(j, 2) <> "*") Then ' 既に比較されていた場合
Cells(i, 2) = "*" ' 2=B
Cells(j, 2) = "*" ' 2=B
' Cells(i, 3) = j ' 3=C 相殺された、相手の行
' Cells(j, 3) = i ' 3=C 相殺された、相手の行
GoTo next_i
End If
End If
Next j
next_i:
Next i
End Sub
No.4
- 回答日時:
こんにちは。
>システムからデータをDLして未収金が正しく回収されたか確認するため
>(未収金計上 1,000 未収金回収 -1,000 が揃って、回収完了となります)
私も会計処理はしていましたし、相手から、そのいうシステムの請求書をもらって付け合わしていました。しかし、時に、それが大幅に狂うときがあります。私は、相手の請求の裏返しのものをパソコンで作っていました。
今、ご質問にあるのは、同じ列にあるという意味だと思います。国内会計では、非常に特殊な処理の気がします。会計方式が違うので、国際的な取引のときにそうしうた請求方式があります。ただし、通常は、Debit & Credit ですが。
会社名はひとつですか?会社名が複数混じっているなら、当然不可能ですね。ソートして、人間の手によるものぐらいしか考えられません。いずれにしても、私の考えているとおりなら、よほどVBAが得意でないと、ここでアドバイスしたぐらいでは、難しいような気がします。まして、コードを回答者が最初から書くなんていうのは、ここのローカル規約に触れてくると思います。今、自信がないようでしたら、ソートして手作業でも、紙の上よりも遥かに便利だと思います。
もし、コードがある程度できているなら、レイアウトを付けて説明してください。ある程度はアドバイスは出来ると思います。
もし、私の想像どおりではなかったら、補足に、もう少し詳しくご説明ください。
ご回答ありがとうございます。
チェック対象となる金額は、ある項目でソートすることによって、縦に並んで表示されます。
ここまでデータを整えることができればあと少しかな、と思っていたのですが何だか難しそうですね。これからコードを書いていこうと思っているので現在コードはありません。
教えていただいた知識を元にして、もう少し検討してみたいと思います。
ご丁寧にありがとうございました。
No.1
- 回答日時:
マクロを使わなくても、A1に「1、000」B1に「-1、000」と入っているのでしたら、C1に
=IF(A1+B1=0,"*","")
でも良いでしょう。
但し、両方とも空白の時に「*」が表示されるのがいやな場合は、
=IF(A1=0,"",IF(A1+B1=0,"*",""))
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
VBA 指定した列にある日時デー...
-
Excelの行数、列数を増やしたい...
-
VLOOKUPの列番号の最大は?
-
vba マージエリアの行数を非表...
-
Alt+Shift+↑を一括で行うには、...
-
エクセルでセル12個間隔で合...
-
列方向、行方向の定義
-
リストからデータを紐付けしたい
-
LEFT関数とIF関数の組み合わせ...
-
エクセルのシートの大きさを変える
-
Excel文字列一括変換
-
データシートビューのタイトル...
-
エクセルマクロでオートフィル...
-
横軸を日付・時間とするグラフ化
-
CSVファイルの「0落ち」にVBA
-
エクセル 重複 隣の列 一番...
-
エクセルマクロで表の途中の集...
-
EXCEL VBA 文字列から電話番号...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
vba マージエリアの行数を非表...
-
VLOOKUPの列番号の最大は?
-
列方向、行方向の定義
-
LEFT関数とIF関数の組み合わせ...
-
VBA 指定した列にある日時デー...
-
Excelの行数、列数を増やしたい...
-
エクセル マクロ 範囲指定で...
-
エクセルのソートで、数字より...
-
VBAで結合セルを転記する法を教...
-
エクセルで最初の行や列を開け...
-
VBAで別ブックの列を検索し、該...
-
横軸を日付・時間とするグラフ化
-
Excel文字列一括変換
-
最近急にVBAの処理速度が遅くな...
-
csvデータの列の入れ替えができ...
-
データシートビューのタイトル...
-
エクセルマクロPrivate Subを複...
-
CSVファイルの「0落ち」にVBA
おすすめ情報