アプリ版:「スタンプのみでお礼する」機能のリリースについて

自分でいろいろ調べてみたのですが、ちょっとわからなくて質問させて頂きます。

VBAのコードにMINとMAX関数を入れて日付の最大値と最小値を求めたいのですがうまくいきません。

処理の初めに、対象の列には書式をYYYY/MM/DDの書式にし、そのあと最大値と最小値を変数に入れて求めています。
値を入れる変数はデータ型にしています。

表には2008/3/12など表示されているのに、MAX,MINともに変数の値は0でした。
どうしてこうなるのか見当もつきません。
よろしければ、返答お願いします。

A 回答 (3件)

例データ


2008/3/14
2007/12/2
2007/12/12
2008/4/1
ーー
Sub test01()
mx = Application.Max(Range("a1:A7"))
MsgBox mx
Range("c1") = mx
mn = Application.Min(Range("a1:A7"))
MsgBox mn
Range("c2") = mn
End Sub
ーー
C列の書式を日付にする
結果
2008/4/1
2007/12/2
書式を標準にすると
39539
39418
とセルの値は、正整数です。日付けシリアル値を知っていますか。
ーー
上記と質問者のコードと比べておかしいところは無いですか。質問者のコードを書かないのも、そもそもおかしい。
ーー
プログラムがうまく実行しないとき
(1)プログラム・コードがおかしい
(2)処理するデータが意図したものと違う
とあり、(2)が良く忘れられている。
日付はその点で要注意なのは常識です。
質問者は日付と思っているセルの値がおかしい。
日付でも正整数の最大値を求めるだけだから何も普通の数と変わらない。
ーー
その面から当たってください。
その中には=Dastevalue(range("A1"))
をやってその結果を使ってみるとか。
ーー
参考に
前もって、A1セルの書式を文字列
A2のセルの書式を文字列にする
A1に2008/3/1
A2にも2008/3/1
Sub test02()
Range("A1").NumberFormat = "yyyy年mm月dd日"
Range("A2") = DateValue(Range("A2"))
Range("A2").NumberFormat = "yyyy年mm月dd日"
End Sub
を実行
結果
2008/3/1
2008年03月02日
こういう風に結果に差が出る。値はA1は変えあらず文字列。
A2は文字列ー>数値であるが。
    • good
    • 5

>値を入れる変数はデータ型にしています。


は「デート型」の誤りでよいですか?

ちょっと実験してみましょう。新規シートのA1:A20に日付データを入力し、以下のマクロを実行してみます。私のPCでは最大の日付と最小日付が正しく表示されました。

Sub Macro3()
Dim a, b As Date
  a = Application.Max(Range("A1:A20"))
  b = Application.Min(Range("A1:A20"))
  MsgBox Format(a, "yyyy/m/d")
  MsgBox Format(b, "yyyy/m/d")
End Sub

>どうしてこうなるのか見当もつきません。
コードを見なければなんとも言えませんが、参照しているRangeが適切ではない(処理が複数シートにまたがっているようなとき、意図しないシートを参照している)とかはありませんか?

もし複数シートにまたがって処理しているなら
 Application.Max(Sheets("Sheet1").Range("A1:A20"))
のようにシートを明示するとよいです。
    • good
    • 1
この回答へのお礼

お早い回答ありがとうございます。

上記のコードで確認したところ数値は入っていました。
しかし、私のPCではうまくいったのですが、もう一台でテストしなければならないので少し試してみます。

参考にですが、コードは
Dim A As Range
Set A = Range(Cells(4, 4), Cells(30, 4))
A.NumberFormatLocal = "YYYY/MM/DD"
cntmin = Application.WorksheetFunction.Min(Range(Cells(4, 4), Cells(30, 4)))
cntmax = Application.WorksheetFunction.max(Range(Cells(4, 4), Cells(30, 4)))
です。
まだ知識が乏しい為、何か指摘あればよろしくお願いします。

お礼日時:2008/03/12 17:56

>どうしてこうなるのか見当もつきません。



コードを見ないと何とも言えませんが・・・。
    • good
    • 1
この回答へのお礼

返答ありがとうございます。
上記の返答にコード書きました。
よろしければ、ご指摘お願いします。

お礼日時:2008/03/12 17:56

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