FC2ブログ

スポンサーサイト 


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/--

Category: スポンサー広告

TB: --  /  CM: --

top △

Nz の罠 


Nz 関数で、Null だったら置換える値(2番目の引数)を省略した場合、対象が、
・数値型の場合は「0」に・・・・
・テキスト型なら空文字("")に・・・・
変換されるんだそうです。

Null 自体に、数値/テキスト型ってあるんでしょうか??

Nz 関数に Null を与えて、2番目の引数が省略されていたら、Empty が返るだけだと思っていました。
この Empty は都合の良いもので、演算過程とか代入・比較先の解釈により、
数値として扱う時には「0」、文字としてなら空文字("") に置き換えられるものと思ってました。

VarType(Null) → 1 ( vbNull )
VarType(Nz(Null)) → 0 ( vbEmpty )

"123=" & Empty → "123="
1 + Empty → 1

っていう簡単なものはイミディエイトウィンドウでも確認できますね。
続きを読んでみようかな ---≫
スポンサーサイト

2013/05/22

Category: 注意しよ

TB: --  /  CM: 0

top △

言い訳 


以下の様な質問があって回答したのですが

インポートした以下の様なテーブルがある
列A列B列C列4D列E
品名  10000500
品名  200001000
品名  500002000
 AAA   
品名  20000500
品名  800001000
 BBB   
品名  50000500
品名  300001000
データは数万件

列B、列C を以下の様な連番に振り直したい
列A列B列C列4D列E
品名1110000500
品名22200001000
品名33500002000
品名4120000500
品名42800001000
品名5150000500
品名52300001000

あまり、VBAに詳しくないこともあり・・・・

列B、列C でのカウンタ処理をメインにした方が良いのか・・・
・・・・レコードの並びがそうなっているもの・・・・として回答してみました。

なお、今回サンプルファイルはありません。
記述してあるものをコピー&貼り付けすれば、確認は容易にできると思います。

CSVをレコードセットとして扱う・・・
CSVから読み込む際に、連番を振る処理例も記述しています。
(ExcelでCSVに連番を振る例も・・・)
続きを読んでみようかな ---≫

2012/11/03

Category: 注意しよ

TB: --  /  CM: 0

top △

フォームの起動 


DoCmd.OpenForm でフォームを起動する時、5つ目の引数でデータ入力モードを指定できますよね。

例えば、
ボタン「btn1」がクリックされたら
  DoCmd.OpenForm "フォーム名", , , , acFormAdd, acDialog

ボタン「btn2」がクリックされたら
  DoCmd.OpenForm "フォーム名", , , , acFormReadOnly, acDialog

ここでさらに、起動されたフォームにボタン「btn21」「btn22」「btn23」があったとして、
起動が「btn1」からであった場合、「btn22」は表示したくない。
起動が「btn2」からであった場合、「btn21」は表示したくない。

起動元から、起動したフォームの状態を変更する・・・・
これ、(私は)あまり好きじゃないので、起動されたフォームでどうにか・・・・って考えます。
特に今回は、acDialog を指定しているので、起動したフォームが閉じられるまで、
起動元の処理は止まっちゃいます。

acDialog 指定を外して、デザインで
「ポップアップ」を「はい」 & 「作業ウィンドウ固定」を「はい」にすれば・・・
(ヘルプに書いてますね)
起動元の処理を止めておきたい・・・ acDialog 指定が必須・・・さて、どうしましょう
続きを読んでみようかな ---≫

2012/06/03

Category: 注意しよ

TB: --  /  CM: 0

top △

テーブルリンクあれこれ 


忘れないうちに覚書という事で・・・

リンクテーブルであるかの判別は
  Dim db As DAO.Database
  Dim tdf As DAO.TableDef

  Set db = CurrentDb
  For Each tdf In db.TableDefs
    With tdf
      If (Len(.Connect) > 0) Then
        ' リンクテーブルだよ
とか

  Dim db As DAO.Database
  Dim tdf As DAO.TableDef

  Set db = CurrentDb
  For Each tdf In db.TableDefs
    With tdf
      If (.Attributes = DB_ATTACHEDTABLE) Then
        ' リンクテーブルだよ
とか・・・

判別は良いんだけど、リンクを新規に作る、パスを張り替える・・・
対Excel へは・・・、対CSVファイルには・・・

追加として、
SQL内で外部の accdb / Excel / CSV から入力・出力するには・・・・
続きを読んでみようかな ---≫

2011/11/27

Category: 注意しよ

TB: 0  /  CM: 2

top △

IIF って三項演算子? 


ちょっと前までは、IIF は ACCESS での三項演算子の方言だと思ってました。

「関数」と言われると、ユーザ定義関数と安易に結び付けて考えてしまいます。
でも、ある回答で、IIF は関数で・・・・
望む関数は、IIF で記述したものと解釈できる・・・・

「IIF は関数」っていう記述が多いし、関数なんでしょう。
記述に注意することがあるみたい。

ということで、場面による動きを見てみました。

呼び出されたらメッセージを出す関数群を作っておきます
Public Function fncA() As String
  Debug.Print "fncA : A"
  fncA = "A"
End Function
・・・・

で、以下の IIF でどの関数が呼ばれるか  (これが適当なのかは???)
i = 1
sTmp = IIf(i < 3, IIf(i = 1, fncA, fncB), IIf(i = 3, fncC, fncD))

kEnt79
というメニューを用意しました。

関数が呼ばれた結果は、以下のようになりました。
(ケース番号はメニューの上から 1 ~)
 ケース番号 
fncA
fncB
fncC
fncD
fncA
fncB
fncC
fncD
fncA
fncB
fncC
fncD
fncA
fncB
fncC
fncD
fncA
fncB
fncC
fncD
fncA
fncB
fncC
fncD
fncA
fncA

※ 私の 2007 環境での結果です
※※ ケース番号3は、2000/2003 で動きが異なりました
続きを読んでみようかな ---≫

2011/06/11

Category: 注意しよ

TB: 0  /  CM: 0

top △


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。