Excel VBA 質問スレ Part49©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/06/26(月) 02:15:14.60ID:T3ylemnb0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part48
http://mevius.2ch.net/test/read.cgi/tech/1494890685/

※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/07/27(木) 12:17:23.37ID:yI2DKD3yd
チンリン山脈
2017/07/27(木) 13:24:05.39ID:LMuXn2N9a
>>603
いやだからさ
俺の言いたいこと伝わらないし理解する気無いよね
こっちはマッチしか無いから仕方なくマッチ使ってんの
不満だからって努力を放棄してるわけじゃないからな?
ただどう考えても手間だろ
そんだけの話
2017/07/27(木) 14:02:53.37ID:ZNB0F0Q0H
>>610
君も俺の言いたいこと1ミリも理解しようとしてないから、お互い様だね
612デフォルトの名無しさん (ササクッテロル Spb3-ntdb)
垢版 |
2017/07/27(木) 14:43:39.94ID:DPiXNUUHp
>>597
意味がわからない?
学びなおした方が良いぞ
2017/07/27(木) 16:09:11.81ID:P1js1uXhM
>>612
> サブクラスに相当する関数から
> スーパークラスに相当する関数を呼べばいいんじゃね?
そこまで言うならなんの意味があるのか説明してみな
614デフォルトの名無しさん (ワッチョイ ea06-HJpE)
垢版 |
2017/07/27(木) 16:44:21.21ID:7xCZa4oD0
だからさぁお前らは雑談したいだけだろ?スレ立ててそこでやれっつーの
クソうぜぇ
2017/07/27(木) 16:44:34.77ID:uf/My/5wa
>>611
使い方によってはvbaだってoopできるよ!って言いたいんでしょ?
2017/07/27(木) 17:00:44.58ID:ZNB0F0Q0H
>>615
さいしょから言ってるでしょ
> オブジェクト指向にドップリしてたら使いにくいことこの上ないと思う
なことないよ
2017/07/27(木) 17:11:23.71ID:yI2DKD3yd
使いたいときに便利な機能を自由につまみ食いできるのがいいライブラリだと思っているんだが、
オブジェクト指向のライブラリって少しおせっかいというか世界観を押し付けてくるところがある。
会員にならないと利用できないサービスみたいな感じ。
自分で作ったものを自分で利用する分には当然問題ないんだけどね。
VBAの言語機能の弱さを考えると、クラス間の関連のある体系的な使い方を実現するのは厳しいだろう。
2017/07/27(木) 17:44:10.44ID:uf/My/5wa
>>616
俺は工夫を強いられてる時点でうんちだと言っている
以上です
2017/07/27(木) 17:59:09.25ID:ZNB0F0Q0H
経験不足だね
言語10個くらいマスターしてこい
620デフォルトの名無しさん (アウーイモ MM9f-k5Qo)
垢版 |
2017/07/27(木) 19:42:01.40ID:xCwJ4jCdM
某サイトを参考にメールを一括作成するVBAを書いています。
createitemfromtemplateの行で「実行時エラー13 型が一致しません」というエラーが出ます。
どうやらcreateitemfromtemplateがうまく機能していないようなのですが、解決方法を教えていただけませんでしょうか。
よろしくお願いいたします。
※「Microsoft Outlook 14.0 Object Library」の参照設定はONになっています。
-----------------------------------
Sub main()

Dim OL As New Outlook.Application
Dim M As MailItem

Dim MaxRow: MaxRow = Range("A1").End(xlDown).Row

For i = 2 To MaxRow
Set M = OL.createitemfromtemplate("D:\本文.msg")

M.To = Cells(i, 列.件名).Value
M.Subject = Cells(i, 列.件名).Value
M.Attachments.Add "D:\" & Cells(i, 列.添付ファイル).Value
M.HTMLBody = Replace(M.HTMLBody, "●●", Cells(i, 列.氏名).Value)
M.SaveAs "D:\" & Cells(i, 列.企業名).Value & "_" & Cells(i, 列.氏名).Value & ".msg"
Next

End Sub
-----------------------------------
2017/07/27(木) 20:32:44.20ID:60P4ZjAM0
>>620
msdnのリファレンスをみると
Outlookテンプレート(.oft)を指定しろって書いてあるので
怒られているとおり、型がちがうのでしょう。

CreateItemメソッドを使えばいいんじゃないでしょうか。
2017/07/27(木) 21:59:25.00ID:aAe8+IMH0
オブジェクト指向がどうこうって語りたいなら

オブジェクト指向
って言葉と
オブジェクト指向言語
って言葉をちゃんと区別して発言して下さい
623620 (アウーイモ MM9f-k5Qo)
垢版 |
2017/07/27(木) 22:07:28.99ID:xCwJ4jCdM
>>621
返信ありがとうございます!!
すみません、CreateItemでも変わらずエラーでした・・。
ちなみに下記のように.oftを指定しても同じでした。
これは本当に不思議です・・・。

---------------------------------------
Sub test03()

Dim OL As New Outlook.Application
Dim M As MailItem
Set M = OL.CreateItemFromTemplate("D:\本文.oft")

M.To = "aaaa@bbb.co.jp"
M.SaveAs "D:\test03.msg"

End Sub
---------------------------------------
2017/07/27(木) 22:19:54.50ID:eHKEweRs0
関西のお笑いと関西のお笑い芸人も区別して語るべきなのか?
2017/07/27(木) 22:40:28.48ID:SAqwCo2Mx
>>624
そうよ
2017/07/27(木) 22:46:54.67ID:e65zqkX+0
俺予想だと、2023年くらいに.NETと統合されるので、大丈夫じゃないの。
2017/07/27(木) 23:04:48.75ID:60P4ZjAM0
>>623
Sub test()

Dim ol As New Outlook.Application
Dim mi As MailItem
Set mi = ol.CreateItem(olMailItem)
mi.Display

End Sub

この最小構成でメール編集画面がでるかお試しを。
出なかったら参照設定が変なのかも。
Excelのバージョンが変わると勝手に参照設定のバージョンも
変わるという罠に引っかかったことがあるので。
実行時バインディングでやってみると言う手もあり。
2017/07/27(木) 23:18:55.37ID:xCwJ4jCdM
>>627
最小構成でやってみると、やはり同じエラーでした!
これは、参照ができていないのですか??
2017/07/27(木) 23:25:30.12ID:8/6stQ5Xr
'// 1行目の項目名が、A列から順に
'//[アドレス][件名][添付ファイルパス][本文]
'// のとき、

Dim dataSet
Dim lastRow As Long
Dim i As Long

lastRow = Cells(Rows.Count, 1).End(xlUp).Row
dataSet = Range(Cells(2, 1), Cells(lastRow, 4)).Value

With CreateObject("Outlook.Application")
  .GetNamespace("MAPI").GetDefaultFolder(16).Display
  For i = 1 To lastRow - 1
    With .CreateItem(olMailItem)
      .To = dataSet(i, 1)
      .Subject = dataSet(i, 2)
      .Attachments.Add dataSet(i, 3)
      .Body = dataSet(i, 4)
      .Save
    End With
  Next i
End With
2017/07/27(木) 23:27:06.45ID:60P4ZjAM0
>>628
よく考えたら、参照ならその前にエラーを吐きそう。
ためしに

Sub test()

Dim ol As Object
Set ol = CreateObject("Outlook.Application")
Dim mi As Object
Set mi = ol.CreateItem(olMailItem)
mi.Display

End Sub
これをOption Explicitを無効にして実行したら
どうなるでしょうか?

だめならOS再起動してみる。
どうにも理解不能なエラーがこれで直ったことがあるw。
2017/07/27(木) 23:56:32.00ID:aAe8+IMH0
>>628
まず、そのユーザーでOutlookはちゃんと動いてメールの送受信できるのか?
2017/07/28(金) 00:24:24.58ID:EJW5hZGgM
>>630
試しましたが同じエラーでした。

>>631
問題なくできています。


みなさん、ご協力ありがとうございます。ご迷惑おかけしてすみません。
今気づいたのですが参照先が14.0でした。最新は15.0なんですよね?これが原因でしょうか?
2017/07/28(金) 04:23:09.57ID:Kx1QSHwna
皆様ありがとうございました! 
理由はわかりませんが突然できるようになりました!
本当にご迷惑おかけしました!
2017/07/28(金) 04:32:44.73ID:ccATQH/dr
>>632
ごめん。コード間違ってた。orz

参照設定をoffにし、↓のコードで試してみて。

'// olMailItemを直値(0)に変えた
Dim dataSet
Dim lastRow As Long
Dim i As Long

lastRow = Cells(Rows.Count, 1).End(xlUp).Row
dataSet = Range(Cells(2, 1), Cells(lastRow, 4)).Value

With CreateObject("Outlook.Application")
  .GetNamespace("MAPI").GetDefaultFolder(16).Display
  For i = 1 To lastRow - 1
    With .CreateItem(0)
      .To = dataSet(i, 1)
      .Subject = dataSet(i, 2)
      .Attachments.Add dataSet(i, 3)
      .Body = dataSet(i, 4)
      .Save
    End With
  Next i
End With
2017/07/28(金) 04:34:16.17ID:ccATQH/dr
一歩遅かったか…orz
2017/07/28(金) 06:49:10.86ID:Kx1QSHwna
>>635
おはようございます!
ありがとうございます!
2017/07/28(金) 23:02:57.85ID:+oxMyCi10
win10
excel2016で
MSXML2.XMLHTTPを使って
responseTextでgoogle検索結果のページを取得しようとすると、
responseTextで返ってきたものが、今までwin7 excel2007などで返ってきたものと全然違うんですが、win7の時のように受け取る方法ってありませんか?

win7の時はhtmlそのものが返ってきてましたがwin10では最初の方が判読困難です。

やろうとしていることは、vbaでgoogle画像検索の結果の画像をセルに表示しようと思ってます。
2017/07/30(日) 10:16:32.82ID:WZc9I6Vq0
そういえば responseBody しか使ったことないなあ
(adTypeBinary な ADODB オブジェクトに Write するために)
2017/07/30(日) 12:41:33.40ID:ND/Yhbfk0
すみません、いろいろ試してたんですが、google以外ではちゃんと同じようなものを受け取れてました。
googleでは環境によって返すものが違うのかもしれません。
その先はスレ違いになるので自分でいろいろやってみます。ありがとうございました。
2017/07/30(日) 15:24:50.24ID:LIjBkUDz0
api以外でgoogleの検索結果を取得しないほうがいい
すぐにアクセス禁止になる
641デフォルトの名無しさん (アウーイモ MM9f-GszO)
垢版 |
2017/08/02(水) 00:57:39.97ID:O3oN8G+MM
Function Name2Adr(str As String)
Dim Cts As Folder, Ct As ContactItem
Set Cts = CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(olFolderContacts)
Set Ct = Cts.Items.Find("[Email1DisplayName] = '" & str & "'")

If Ct Is Nothing Then Name2Adr = "不明" Else Name2Adr = Ct.Email1Address

Set Cts = Nothing: Set Ct = Nothing
End Function
↑ローカルのアドレス帳から表示名を検索しメアドを返す関数です。これはうまくいくのですが、
↓下のグローバルアドレス帳を検索するものがうまくいきません。エラーメッセージは「オブジェクトはこのプロパティまたはメソッドをサポートしていません」です。
どなたか解決法をご教示ください。よろしくお願いします。
Function gName2Adr(str As String)
Dim olApplication As Outlook.Application
Dim olNameSpace As Outlook.Namespace
Dim olAddressLists As Outlook.AddressLists
Dim olAddressList As Outlook.AddressList
Dim olAddressEntries As Outlook.AddressEntries

Set olApplication = New Outlook.Application
Set olNameSpace = olApplication.Session
Set olAddressLists = olNameSpace.AddressLists
Set olAddressList = olAddressLists.Item(2)
Set olAddressEntries = olAddressList.AddressEntries

Dim olAddressEntry As Outlook.AddressEntry
Set olAddressEntry = olAddressEntries.Items.Find("[Email1DisplayName] = '" & str & "'") '←この行でエラー
If olAddressEntry Is Nothing Then gName2Adr = "不明" Else gName2Adr = olAddressEntry.Email1Address
End Function
2017/08/02(水) 02:57:39.31ID:9fnjiac4a
>>641
名前長いな
2017/08/02(水) 06:22:21.40ID:Yub86NHXr
少々長くてもわかりやすい名前をつけるのが基本だからね。
ハンガリアンよりは全然いい。
2017/08/02(水) 06:31:28.66ID:SLRN4nNP0
少々長くても分かりやすい名前を付ける、それがハンガリアン記法

想像してるのはたぶんシステムハンガリアン記法
2017/08/02(水) 07:20:47.27ID:Mrcj6vwlM
変数はAddressなのにメソッド名はAdrで統一してないのは理由あるの?
2017/08/02(水) 07:40:08.64ID:ed9o3kBwx
変数名長いなぁ
olAppとかAdrListとかにすれば良いやん
2017/08/02(水) 07:40:35.97ID:Yub86NHXr
>>644
単に「ハンガリアン」と言った場合は、システムハンガリアンの意味で用いられていることが多い。

ということでどうかひとつ。
2017/08/02(水) 07:44:09.62ID:Yub86NHXr
>>646
むしろ関数名を

GetNameToAdddress

にしたほうがいいかも。
2017/08/02(水) 07:44:43.49ID:boOv7Sns0
>>641
Dim Cts As Folder, Ct As ContactItem

ユーザー定義型が定義されてません
エラーが出た
2017/08/02(水) 08:11:17.19ID:i5+f8wczM
>>649
参照設定してないだけじゃね?
2017/08/02(水) 08:56:23.68ID:boOv7Sns0
>>650
まぁそうだけど、どれ参照するのか探すのめんどい
開発用に、コンポーネント参照の全選択ほしいな。それともあるんかな?
2017/08/02(水) 09:10:48.85ID:Y/LidHA/0
>>650
649は店に来たお客さんのつもりのようだから、まともに相手する必要はないよ
2017/08/02(水) 11:50:02.54ID:a22879YUM
単なる自己満足なんだからそこまで突っ込むなよ
どうせ永遠に平行線なんだろ?
2017/08/02(水) 12:08:29.03ID:pZ2w6jYsM
>>648
メソッドの頭文字は小文字にしたいな
あとd多いのはなんか意図あるの?
2017/08/02(水) 12:26:23.95ID:Yub86NHXr
>>654
ごめん、dはタイプミスだ。

メソッドの頭文字を小文字にするのは何流?
VBA流では大文字だよね。
2017/08/02(水) 12:33:57.68ID:x+1N4OhAM
>>655
言語関係なくただのキャメルケースだよ
657641 (オイコラミネオ MMb6-Cs75)
垢版 |
2017/08/02(水) 13:14:55.44ID:1uis+HfsM
みなさん、ご迷惑おかけしてすみません。
outlook vbaのスレに書くべき質問だったでしょうか、、

>>649
すみません、outlookのライブラリです。
よろしくお願いします。
2017/08/02(水) 15:50:17.32ID:Yub86NHXr
>>656
いや、だからメソッドをキャメルケースにするのは何流なのかなと。
2017/08/02(水) 16:45:06.13ID:pmz5Ebvba
>>658
javascriptはキャメルだと思う
660641 (オイコラミネオ MMb6-Cs75)
垢版 |
2017/08/02(水) 16:56:06.29ID:uQ5PKG3iM
みなさん、ご迷惑おかけしてすみません。
outlook vbaのスレに書くべき質問だったでしょうか、、

>>649
すみません、outlookのライブラリです。
よろしくお願いします。
2017/08/02(水) 18:07:23.96ID:Yub86NHXr
>>659
IDの最後がvbaだ。カコイイ

なるほど、メソッドキャメルはJS流だったのね。サンクス
2017/08/02(水) 18:28:23.95ID:i5+f8wczM
>>660
Outlook VBA スレないからまあここでもいいと思うが仕事中に軽くググった範疇だといい方法が見つからん
> Set olAddressEntry = olAddressEntries.Items.Find("[Email1DisplayName] = '" & str & "'") '←この行でエラー
Items.Find( ) は Folder オブジェクトしか持ってないからここでエラーになるのは当然
グローバルアドレス帳(Global Address List)は GetGlobalAddressList( ) で取得できるし内容も入っているんだが取得したリストの GetContactsFolder( ) を呼び出しても Nothing しか返ってこない
何か設定が要るのか根本的に頓珍漢なのかさっぱりわからん
2017/08/02(水) 19:58:09.08ID:Yub86NHXr
ここでも聞いてみれば?

つ【VBAなんでも質問スレ Part2】
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
2017/08/03(木) 06:23:52.11ID:y8hiM9O7a
>>662
ありがとうございます!勉強になります。

> グローバルアドレス帳(Global Address List)は GetGlobalAddressList( ) で取得できるし内容も入っているんだが

↑その内容というのは、debug.printで見ることはできますでしょうか??
2017/08/03(木) 07:51:33.57ID:T58VKPgl0
>>664
foo = bar.GetGlobalAddressList( )
をどこかに入れてfooをウォッチ式で見る
2017/08/03(木) 08:16:18.57ID:8PSWLe0hM
>>664
Set GlobalAddressList = Namespace.GlobalAddressList( )
Debug.Print GlobalAddressList.AddressEntries.Item(1).Name
とかすれば見れるよ
全件エクスポートするサンプルとかあるので見てみて
https://www.slipstick.com/developer/code-samples/export-exchange-gal-excel/
667デフォルトの名無しさん (オイコラミネオ MM4b-1llH)
垢版 |
2017/08/04(金) 13:47:28.51ID:2SBD/wKoM
バージョンが上がって日付時刻型の除算ができなくなりました。バリアント型にしても空になります。
対応方法はありませんでしょうか?
また、こういう仕様変更はどこで確認できますか?
2017/08/04(金) 19:09:28.11ID:HbiPV4wFd
>>667
Dateの除算てなんのためにやるんだっけ?
CLngとかしてからじゃダメなの?
2017/08/04(金) 19:49:21.85ID:EaU+sIDF0
日付じゃなくて時刻(時間)で除算したいのでは?
1950/1/1を2で割って1925/1/1…なんてことはしないだろう

>>667
office 更新プログラム等で検索
https://support.office.com/ja-jp/article/Office-%E6%9B%B4%E6%96%B0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0-a118ec61-f007-492f-bfa5-5a6f764d5471
670デフォルトの名無しさん (ワッチョイ cf11-1llH)
垢版 |
2017/08/04(金) 20:11:22.22ID:CfFJ59fY0
時刻ですね
2017/08/05(土) 08:53:42.25ID:3n3qQbM6r
>>667
エラーの出たコードを書いてみて。
あとバージョンも。2016?
2017/08/05(土) 09:48:36.05ID:7J5Re5fS0
2010でも時刻の割り算できたけど?
2017/08/05(土) 10:09:48.61ID:3n3qQbM6r
じゃあ、この話題はこれで終わりだな。
674デフォルトの名無しさん (ワッチョイ cf11-4x8g)
垢版 |
2017/08/05(土) 11:28:42.39ID:J2w+rLAY0
エラーコードは51
データ型が日付時刻の除算はエラーでる
2017/08/05(土) 12:58:50.71ID:kXEyZiX90
Sub foo()
bar = Date / 2
Debug.Print bar
End Sub

2010、win7だけどエラーでない
676デフォルトの名無しさん (ワッチョイ cf11-4x8g)
垢版 |
2017/08/05(土) 13:00:51.75ID:J2w+rLAY0
>>675
時刻同士で割って見て
2017/08/05(土) 13:07:29.37ID:j7okUzoP0
ダブルにキャストしてから計算したら
ずれるのかな?
2017/08/05(土) 13:08:47.84ID:kXEyZiX90
>>676
Sub foo()
bar = Date / Date
Debug.Print bar
End Sub

普通に1になったけど
679デフォルトの名無しさん (ワッチョイ 8351-FJki)
垢版 |
2017/08/05(土) 13:35:11.02ID:1ncAb1Zc0
https://www.youtube.com/watch?v=h_iMHmwQpR8
2017/08/05(土) 16:53:51.52ID:3n3qQbM6r
質問者からのエラーコードの提示がないので無駄な回答だな。
2017/08/05(土) 18:06:14.68ID:fC/MwjWZ0
時刻を時刻で割る意義は? どんな分野で必要と成るんだ? それは知りたい
2017/08/05(土) 18:54:05.96ID:UH683s5QM
バージョンが上がって…
とか言いながらバージョンを書かない馬鹿
指摘されても書かないという
683デフォルトの名無しさん (ワッチョイ ad91-j7Kr)
垢版 |
2017/08/05(土) 18:58:41.09ID:NpEI7ikB0
>>681
8時間の就業時間の間に25分掛かる作業を何回できるか見積るとか
2017/08/05(土) 19:00:17.07ID:90gBDUFU0
しょうもない質問はほっとけばいいんじゃ?
それとも答えたくてウズウズしてる感じ?
2017/08/05(土) 19:45:20.37ID:ze59kfDf0
>>683
無理くり理由をこじつけてもその程度だよな…ほんと何がしたいんだろうな
2017/08/05(土) 20:31:20.41ID:2UigV3EYM
質問するのにバージョンも書かない
ID変わってるのに名無しのまま
環境書けと言ってるのに無視
こんな処理する理由は?と聞かれても無視


こんな人間の生産物を現場で使う恐怖
2017/08/05(土) 20:47:12.34ID:fC/MwjWZ0
それは時刻で無くて時間だろ と
2017/08/05(土) 23:20:40.34ID:3n3qQbM6r
>>686
何のためにここで質問したのかわからないよね。

つか、俺たちが釣られただけ?
2017/08/05(土) 23:56:01.89ID:dqSa99my0
質問者が軌道修正のために必要な情報を提供しないってのはここではザラにあることだろ。
そんなのによく付き合ってられんなー
2017/08/06(日) 00:12:38.56ID:7dbJmn2Z0
質問室じゃねえんだよ
691デフォルトの名無しさん (オッペケ Srd9-31he)
垢版 |
2017/08/06(日) 12:22:25.32ID:hXGNAkd3r
また教えたがりの無能が暴れとるのかw
2017/08/06(日) 16:09:44.69ID:wM27hiyIa
暴れているのはただの煽り
693デフォルトの名無しさん (オイコラミネオ MM4b-4x8g)
垢版 |
2017/08/07(月) 16:41:33.18ID:/LwpuoG3M
>>678
dim a as date
dim b as date
dim test as date

a = time
b = time
test = a / b

でエラー出た
694デフォルトの名無しさん (ワッチョイ 49ad-mf2b)
垢版 |
2017/08/07(月) 16:59:56.15ID:PHW4jpUx0
>>693
地域オプションで先頭が数字以外になるような書式だったとか?
2017/08/07(月) 19:35:32.88ID:9LTblBy60
>>693
環境書けよ
なんでエラー出たとか言うやつは環境書かないの

VBAの日付型は原則数値として扱えるはずので
日付型である事が原因でエラーが出るとは考えにくいけどなぁ

ちなみにエラー51のヘルプ(2007)には
>このエラーが Error ステートメントまたは Raise メソッドで生成されたものでなければ、Microsoft 製品テクニカル サポートに連絡して、メッセージが表示されたときの状況を知らせてください
ってあるから、ホントにエラー51出たならEXCELのバグの可能性もないではないな
2017/08/07(月) 20:09:27.70ID:PGc1T+jA0
excel2010 win7
エラーが起こるのは除算の分母側がdateだった時
longにキャストするか、variantで宣言していれば問題ない(もちろん宣言してない場合も問題ない)
バグくさい挙動だなぁ

Sub foo2()
Dim a As Time
Dim b As Time
Dim test As Date

a = Time
b = Time
test_long = (a * 1) / (b * 1) 'ok
test = a / (b * 1) 'ok
test = 1 / b 'error
test = (a * 1) / b 'error
test = a / b 'error
End Sub

Sub foo()
Dim a As Variant
Dim b As Variant
Dim test As Date

a = Time
b = Time
test = a / b 'ok
End Sub
697デフォルトの名無しさん (ワッチョイ ad91-3aaz)
垢版 |
2017/08/07(月) 20:36:42.78ID:5JtEoMJq0
Cdbl()で分母をDoubleにキャストすればいいだけじゃね?
2017/08/07(月) 20:39:22.17ID:PGc1T+jA0
>>697
まぁ解決法としてはそれでも何でもいいし、そもそもdateで除算って事をやらないんだけど
根本的な原因が分からないと、変なとこで悪影響受けそう
699デフォルトの名無しさん (ワッチョイ ad91-3aaz)
垢版 |
2017/08/07(月) 20:54:07.86ID:5JtEoMJq0
Time って
DateTime.Time プロパティのことだよな
Property Time As Variant
だからもともとVariant型

dim a As Time がエラーになるんだが
700デフォルトの名無しさん (ワッチョイ ad91-3aaz)
垢版 |
2017/08/07(月) 21:05:47.61ID:5JtEoMJq0
Date型はVBAのデータ型で"21:02:32"みたいな文字列なんじゃね?
だから計算するとエラーになる
分子にDate型を持ってきたときはDoubleに自動的にキャストされてると予想
2017/08/07(月) 21:13:12.34ID:PGc1T+jA0
>>699
ごめんなさい訂正前の送ってしまいました
定義部分は以下に変えてください

Sub foo2()
Dim a As date
Dim b As date
702デフォルトの名無しさん (ワッチョイ cf11-4x8g)
垢版 |
2017/08/07(月) 23:25:10.55ID:kmFs6vPH0
>>695
2007じゃエラーでないよ
2017/08/07(月) 23:33:20.74ID:elxVZ6u90
データベースのDATETIME型の値がそのままVBAのDate型変数にマップできれば楽なのに、
1900年以前だとうまくいかないのが残念だ。
704デフォルトの名無しさん (ワッチョイ ad91-Mpnj)
垢版 |
2017/08/07(月) 23:39:54.26ID:5JtEoMJq0
>>702
2010とかだとエラーになる

分母にDate型を持ってくるときは
明示的にCdblでキャストすればエラーにならなくできる

MS側にバグレポートしたところで修正するかどうかはMS側次第
仕様変更したと言うかもしれない
2017/08/07(月) 23:59:58.12ID:HViBOnBI0
そろそろ日付時刻での除算の意味を教えて
2017/08/08(火) 00:39:23.26ID:sJaKEDtc0
>>705
>>683
全くない需要ってわけでもないと思う
2017/08/08(火) 00:57:18.12ID:ZuuTozCK0
キャストしてできるんならなんの問題もないだろう
キャストできない理由があるんじゃないのか?
まさか発想になかったわけじゃないだろうし
2017/08/08(火) 05:17:42.76ID:ttZKdV6P0
つーか質問者本人どこいったんじゃ
2017/08/08(火) 07:26:59.16ID:qEy0EStIr
>>693
つか、dateをdateで割った答えがdateっておかしくね?

たとえば、60分を15分で割ったら答えは「4分」ではないよね。

なので、

Dim test as Long

とすべき。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況