請求書などで1ヶ月分のデーター範囲指定して表示させたいのですが、
今までは(出力日の)先月の 1 日から末日までのすべての日付をその範囲とする日付値の範囲を指定など、区切りによい範囲で作っていました。
If {A_P300.請求日} in LastFullMonth Then{A_P301.請求額}    
  Else 0

 これを20日締めに合わせて作り直したいのです。
 指定したい範囲は3つ。
  例)4月20日の請求書
   先月請求分 1/20~2/19
   今月請求分 2/20~3/19
   入金    3/20~4/19
 できれば、出力した月を認識させて、それぞれ3つの範囲を指定したいのです。

質問内容がわかりにくい場合は指摘してください!

宜しくお願いします。

A 回答 (1件)

こんにちは。

maruru01です。

DateAdd関数を使用すればいいでしょう。

例えば、startDate~endDateの期間でデータを抽出する場合は、

startDate = "2002/1/20"
endDate = DateAdd("m", 1, startDate) - 1
WhereCond = "BETWEEN #" & startDate & "# AND #" & endDate & "#"

という感じです。
なお、DateAdd関数の詳細はヘルプなどを参照して下さい。
では。

この回答への補足

自分なりに調べたつもりなんですけれど、よくわかりませんでした。
 今 Crystal reports というレポーティングソフトを使っているのですが、
そこで、VBで式をつくり、表示させるフィールドをあらたに加えようとし
ています。
 例でいうと、3つそれぞれの範囲内に当てはまる場合のみ’請求金額’を抽出する。
 という感じです。
 説明がうまくできないので、回答もむずかしいですね。


教えていただいた 式(関数)だと何が表示されるのでしょうか。
素人ですみませんでした!

補足日時:2002/04/01 15:34
    • good
    • 0
この回答へのお礼

maruru01さん ありがとうございます!
 素人なので、教えていただいた回答を参考に今やっています。
 結果はまた報告します。

お礼日時:2002/04/01 13:58

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

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

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

QExcelのファイル{(75行*1列の1セット)*33セット分}データをVBで扱う方法を教えてください。

Excelのファイル{(75行*1列の1セット)*33セット分}データをVBで扱う方法を教えてください。

ExcelのデータをVBに読み込んで、それを並び替えするプログラムを作ろうとしています。
なのですが、ExcelのデータをVBに読み込む方法がわかりません。
ネットで調べたらopen,close,get・・とあるのですが、いまいちわかりません。

どなたか教えてください。

Aベストアンサー

Open/Close では実質的に言って無理です。
( Excel のファイル構造がわかればできるかもしれませんが・・・)
VB6 と VB.NET では少し記述方法が違いますが、VB.NET だと

Dim eb As Object
Dim es As Object
Dim strFileName As String

strFileName = "C:\Temp\Book1.xls"
eb = GetObject(strFileName)
es = eb.Sheets(1)
MessageBox.Show(es.Cells(2, 1).value, "Test", MessageBoxButtons.OK, MessageBoxIcon.Information)
eb = Nothing

のような感じで Excel のような感じで内容を読むことができます。
(上の例では 1番目のシートの A列 2行目のセルの内容をメッセージボックスに表示します。)
並び替えですが、Excel 上で並び替えをすることも可能ですが、
読み込んでから並び替えをするなら、
VB6の場合:並び替え関数を自作(並び替えのアルゴリズムはクイックソートやヒープソートなどいろいろありますので、検索して調べてみてください。どこかに VB のサンプルがあるかも。)
VB.NETの場合:Array.Sort が使用可能です。

Open/Close では実質的に言って無理です。
( Excel のファイル構造がわかればできるかもしれませんが・・・)
VB6 と VB.NET では少し記述方法が違いますが、VB.NET だと

Dim eb As Object
Dim es As Object
Dim strFileName As String

strFileName = "C:\Temp\Book1.xls"
eb = GetObject(strFileName)
es = eb.Sheets(1)
MessageBox.Show(es.Cells(2, 1).value, "Test", MessageBoxButtons.OK, MessageBoxIcon.Information)
eb ...続きを読む

Qある文字列の中で数字の20か19がでてくるところまでを取得したい。

恐れ入ります。
 
a = "ごはん2006おちゃづけ"

として ごはん を取得したいんです。
ただこのaの中は "のり1989おちゃ"
かもしれなくて この場合だとのりなんですよね。

このaは年代をあらわしていて、1900~2006まであるんですよね・・。

20だと
Microsoft.VisualBasic.Left(a,InStr(textinnertext(2), 20) - 1)

で取得できるんですけど
20か19かどちらかわからないので困っています。
なるべくif文をつかわずにしたいのですが
どうすればよろしいでしょうか?教えてください。

Aベストアンサー

Imports System.Text.RegularExpressions

Dim a As String = "ごはん2006おちゃづけ"
Dim re As Regex = new Regex("(.+?)\d")
If re.Match(a).Success Then
Console.WriteLine(re.Match(a).Result("$1"))
End If

QVBA 範囲の指定方法

下記のコードにて、列の範囲を指定したいのですが、”セルD2”のところの具体的な書き方が分かりません。

お分かりの方教えて下さい。

Range(Selection, セルD2)←SelectionはD列のどこか

Aベストアンサー

Range(Selection, Range("D2")).Select

では、いけないのですか?

Q出力するプリンタを指定したい。

現在、VB6.0で開発を行い、帳票をACCESSのレポートを使用しています。

レポートを印刷した際に、VB側より指定したプリンタに出力したいのですが、決まって通常使うプリンタに出力されてしまいます。
プリンタは指定できない物なのでしょうか?

ちなみに指定している方法は、デバイス名を記述し、設定されているプリンタを検索し、合うプリンタがあれば、その番号(?)を
Set Printer = XXX(番号)
         ↑忘れました、ごめんなさい。

と言うような形でコーディングしています。

Aベストアンサー

私は、こんな感じにしています。

Private Sub Command1_Click()
Dim prt As Printer
Set Prt = Printer
For Each prt In Printers
If prt.DeviceName = "プリンタのデバイス名" Then
Set Printer = prt
Exit For
End If
Next
Printer.Print "テスト印字"
Printer.EndDoc
End Sub

Qエクセルで範囲指定の方法

指定する列の範囲はAから始まり、X~Z位までです。行は決まっています。先ず次の文で列の範囲を取得します。
Range("A1").CurrentRegion.Select
I = .Selection.Columns.Count
例えば5行目のI列を指定する時はどうすれば良いでしょうか。
Range("A5:" & I & "5").Select では、エラーになります。

Aベストアンサー

■ 1 点目

> .Range("A1").CurrentRegion.Select

Range の前にピリオドがあるので、With ~ が省略されているのでしょう。
抜粋のコードでは正確なコメントがしにくいのですけど、恐らくシートを
切り替えて実行するとエラーになるのですよね?

  With Worksheets("Sheet1")

のようなコードでシートを指定しているのではないですか?

> .Range(Cells(I, 1), Cells(I + 40, PrintCol)).Select 'この文でエラー発生

仮に With Worksheets("Sheet1") が省略されているとするなら、この
コードを Sheet2 がアクティブの状態で実行すればエラーが発生します。

わかり易くコードを補完して書けば、この行は以下のように解釈されて
実行されてます。

Worksheets("Sheet1").Range(ActiveSheet.Cells(I, 1), ActiveSheet.Cells(I + 40, PrintCol)).Select

Worksheets("Sheet1") は With によって補完されるもの。以下に続く
Range() の括弧内の Cells はシートを指定しないと現在アクティブな
シートとなります。

つまり、Sheet2 がアクティブな状態なら、次のコードと同意です。

Worksheets("Sheet1").Range(Worksheets("Sheet2").Cells(I, 1), Worksheets("Sheet2").Cells(I + 40, PrintCol)).Select

Worksheets("Sheet1").Range ~ で Sheet1 にあるセルを参照するよー...
としているのに、肝心の Range の中身で異なるシート、つまり Sheet2
のセルを指定してます。

これはイメージし易いと思いますが、物理的に不可能っぽいです。

■ 2 点目

Select メソッドは「アクティブシートの中にあるものに対してのみ有効」
なので、現在アクティブでない別シートにあるものを Select しようと
するとエラーになります。これは VBA の仕様です。


■ 回避策ですが...一例を示しておきます。

With ActiveSheet
  ' 列数をカウント
  PrintCol = .Range("A1").CurrentRegion.Columns.Count
  ' 罫線の描画
  For I = 1 To PrintRow Step 41
    Range(.Cells(I, 1), .Cells(I + 40, PrintCol)).Borders.Weight = xlThin
  Next I
End With

# んーー。。。Rem を使う辺りから Basic 系言語の経験がある方だと
# 推察致します。#2 や #3 のコードは VBA では良く使われるテクニック
# ですから、とりあえずお試しを。

■ 1 点目

> .Range("A1").CurrentRegion.Select

Range の前にピリオドがあるので、With ~ が省略されているのでしょう。
抜粋のコードでは正確なコメントがしにくいのですけど、恐らくシートを
切り替えて実行するとエラーになるのですよね?

  With Worksheets("Sheet1")

のようなコードでシートを指定しているのではないですか?

> .Range(Cells(I, 1), Cells(I + 40, PrintCol)).Select 'この文でエラー発生

仮に With Worksheets("Sheet1") が省略されているとするなら、この
コード...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報