準・究極の選択

エクセルの列の中で、1,000 と -1,000を同じデータとみなして、
その隣の列に"*"を表示するマクロの記述を教えていただけないでしょうか?

何ゆえ必要かと言いますと、経理部内で経費管理をしているのですが、
システムからデータをDLして未収金が正しく回収されたか確認するために必要なのです。
(未収金計上 1,000 未収金回収 -1,000 が揃って、回収完了となります)

以上宜しくお願いします。

A 回答 (7件)

数学の分野ですね。


マクロを使わずとも関数で十分代用可能です。

1,000 と -1,000 を同じとみなすには、絶対値を取るのが普通です。
絶対値を取る関数は ABS になります。
あとはIF関数で二つの値を比較して等しければ "*" を表示させるだけで良いので、
=IF(ABS(1000)=ABS(-1000),"*","")
などでしょうか。

または、数値を二乗してマイナスの符号を消してしまうのも方法です。
二乗は、-1,000*-1,000 でも代用できますし、関数ならば POWER になります。
あとはIF関数で上記と同様に、
 =IF(POWER(1000,2)=POWER(-1000,2),"*","")
こんなところでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。マクロを使わなくてもよさそうなのはわかったのですが、データが混在している中で、値 "a"と"-a"を判断させるには
どうしたらよいでしょうか?宜しくお願いいたします。

お礼日時:2007/04/20 11:14

すいません、#5でソースコード書いてしまいました。


#4さんのローカルルールの指摘と入れ違いで書いてしまいました。
禁止事項、ネチケットを認識不足ですね、再確認します、失礼しました。
    • good
    • 0

こんにちは。


最近他の方への回答でも書かせてもらいましたが、VBAの知識をお持ちでコードのどこかが解らないとおっしゃるなら、#4さんが仰るようにご自分で検討されたコードを載せるべきだと思います。VBAといえども、プログラムソースは知的財産です。本来ならお金を払って開発を依頼するものだと思います。それをご自分でやられるつもりなら一から人に頼るのはいかがなものでしょうか。

今回のご質問は、同じ列に(A列とします)1,000 と -1,000などのデータが入っており、その中から相殺できないデータを探して未回収とするということで考えて宜しいですか?20,000件という量のデータを探すのは苦労があるとお考えなのは解ります。私なら、B列にABS関数で絶対値を表示させ、C列にはあらかじめ"*"を全てに入力しておきます。その状態でピボットテーブルを作成し、行をB列の絶対値、データをA列の金額の合計にしたら、相殺できない未回収金の絶対値がどれかわかります。オートフィルタでその絶対値の金額を表示させ、手作業でC列の"*"を消していきます。この方法である程度はデータを限定することができるのではないでしょうか。
    • good
    • 0
この回答へのお礼

#7さんの仰る通り、質問の流儀を弁えず失礼致しました。
ご教示頂いた内容を参考にしてやってみます。
貴重なお時間頂きありがとうございました。

お礼日時:2007/04/20 12:06

こんな感じでしょうか? 全然違っていたらごめんなさい。


相殺イメージがわからなかったので、重複を考慮してみました。

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
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。参考にさせて頂きます。
貴重なお時間を頂戴しありがとうございました。

お礼日時:2007/04/20 11:59

こんにちは。



>システムからデータをDLして未収金が正しく回収されたか確認するため
>(未収金計上 1,000 未収金回収 -1,000 が揃って、回収完了となります)

私も会計処理はしていましたし、相手から、そのいうシステムの請求書をもらって付け合わしていました。しかし、時に、それが大幅に狂うときがあります。私は、相手の請求の裏返しのものをパソコンで作っていました。

今、ご質問にあるのは、同じ列にあるという意味だと思います。国内会計では、非常に特殊な処理の気がします。会計方式が違うので、国際的な取引のときにそうしうた請求方式があります。ただし、通常は、Debit & Credit ですが。

会社名はひとつですか?会社名が複数混じっているなら、当然不可能ですね。ソートして、人間の手によるものぐらいしか考えられません。いずれにしても、私の考えているとおりなら、よほどVBAが得意でないと、ここでアドバイスしたぐらいでは、難しいような気がします。まして、コードを回答者が最初から書くなんていうのは、ここのローカル規約に触れてくると思います。今、自信がないようでしたら、ソートして手作業でも、紙の上よりも遥かに便利だと思います。

もし、コードがある程度できているなら、レイアウトを付けて説明してください。ある程度はアドバイスは出来ると思います。

もし、私の想像どおりではなかったら、補足に、もう少し詳しくご説明ください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
チェック対象となる金額は、ある項目でソートすることによって、縦に並んで表示されます。
ここまでデータを整えることができればあと少しかな、と思っていたのですが何だか難しそうですね。これからコードを書いていこうと思っているので現在コードはありません。
教えていただいた知識を元にして、もう少し検討してみたいと思います。
ご丁寧にありがとうございました。

お礼日時:2007/04/20 11:41

足してゼロになればいいのでは・・・。

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
データ数が20,000件ほど混在していて、そのうちのデータを判断させたいのです。質問が言葉足らずですみません。

お礼日時:2007/04/20 11:06

マクロを使わなくても、A1に「1、000」B1に「-1、000」と入っているのでしたら、C1に


=IF(A1+B1=0,"*","")
でも良いでしょう。
但し、両方とも空白の時に「*」が表示されるのがいやな場合は、
=IF(A1=0,"",IF(A1+B1=0,"*",""))
    • good
    • 0

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