[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/04 11:41 / Filesize : 289 KB / Number-of Response : 962
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

●EXCEL・VBA質問スレ Part2●



1 名前:デフォルトの名無しさん [2007/05/27(日) 00:06:58 ]
・まじめにExcelの機能を追及してみようと思う奇特なひと
・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと
・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと
・とにかく漏れにこんな仕事まわすなと怒っているひと
そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです

前スレ
pc11.2ch.net/test/read.cgi/tech/1168308855/

766 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 14:34:40 ]
初心者向きなのに解かりづらい本が多いからね。

 ↓ こっちのサイトが私にはわかりやすい。
ttp://www6.plala.or.jp/MilkHouse/index.html

767 名前:デフォルトの名無しさん [2007/08/29(水) 14:50:44 ]
VBAって今後どうするの? フォーマットが公開されていないファイルは、
政府も使わないと言っている。2007でXMLも標準になったが、マクロが
仕込んであるのでは、公的には使えなくなるんじゃないのかな?

768 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 16:13:18 ]
> 政府も使わないと言っている。
騙されてる奴が多いが「使わない」とは言ってない
国のやるポーズには、必ず逃げ道仕込んでおくものさw

769 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 18:31:56 ]
通常VBA含んだExcelを他に配ったりしないんじゃないの?
自分の仕事を効率化するために使ってる人が大部分じゃない?
私は他人の作ったロックしたマクロを使ったことないし使うつもりも無い。

770 名前:デフォルトの名無しさん [2007/08/29(水) 21:34:34 ]
恐れ入ります、質問をお願いします。
会社でエクセルのマクロを使用していますが、困っています。
現状、共用ドライブにエクセルファイルを格納し、5人で使用しています。
使用する際は、それぞれ一人一人にパソコンが支給されており、支給された個人のパソコンから共用ドライブにアクセスし、入力
しています。
こういった状況で、マクロで入力する際、人の名前(入力者の名前)を自動的に取得、エクセル表の任意の場所に貼り付けすることはできないものでしょうか?
winXP エクセル2000です。

771 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:57:06 ]
出来るんじゃないかな?ユーザー名を取得し履歴のように日時と一緒に書き込んだり
入力したセルのコメントに日時とユーザー名を記録する事も。

772 名前:デフォルトの名無しさん [2007/08/29(水) 23:05:23 ]
EXCELでVBAでDLLを使う場合、
そのDLLをxlsファイル内に埋め込む方法はありませんか?

773 名前:デフォルトの名無しさん [2007/08/29(水) 23:16:04 ]
ActiveSheet.OLEObjects.Add(
Filename:= "C:\Documents and Settings\Administrator\デスクトップ\xxx.dll",
Link:=False,
DisplayAsIcon:=False).Select

これはxlsファイル内にdllを保存するということでいい?
このファイルを外部に保存するにはどうしたら・・・

774 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:34:31 ]
>>770
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long



775 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:37:36 ]
>>772
ない。DLLはDLL。
素直にDeclare宣言して関数使いましょう。


776 名前:デフォルトの名無しさん [2007/08/29(水) 23:44:06 ]
>>775
宣言など使い方は通常通りでいいんだけど

配布ファイルが複数になるのが駄目なんだ

xls内にdllを保存し、
起動時にdllをカレントフォルダに保存。
dllを使った処理を行い、
終了時にdllを削除。
っていう流れがやりたい。

777 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:50:02 ]
>>776
> xls内にdllを保存し、
これの意味が分からん。保存ってなんだ?
LoadLibraryしてFreeLibraryすりゃいいんじゃね?
そういう話じゃない?

778 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:51:09 ]
ついでだ。
#If Win32 Then
Private Declare Function LoadLibraryEx Lib "Kernel32" Alias "LoadLibraryExA" _
(ByVal lpLibFileName As String, _
ByVal hFile As Long, _
ByVal dwFlags As Long) As Integer
Private Declare Sub FreeLibrary Lib "Kernel32" (ByVal hLibModule As Integer)
#Else
Private Declare Function LoadLibrary Lib "kernel" (ByVal f$) As Integer
Private Declare Sub FreeLibrary Lib "Kernel" (ByVal h As Integer)
#End If

779 名前:デフォルトの名無しさん [2007/08/29(水) 23:57:50 ]
>>777
A.xlsはマクロでB.dllを使用しています。
A.xlsを利用するためには同(又はパスの通った)フォルダにB.dllを置く必要があります。
ですが、

A.xlsの配布時にB.dllを同時に配布すればいいんですが、それは運用的に無理です。
また、ファイルの移動(複写)をする場合には、A.xlsのみの移動(複写)でシステムが動くようにする必要があります。

なので、
A.xls内にB.dllを埋め込み、実行時それをファイルとして抽出保存し、利用する必要があります。

780 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:03:16 ]
いや、DLLはDLLなんだからファイル自体別。
埋め込むってのがよく分からんが、
DLLの配布がNGなら
DLLの関数をVBAで組めばいいって話じゃ済まないの?
要するに、DLLは無くして全部VBAで書けって話。
ダメなん?

781 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:07:13 ]
>A.xls内にB.dllを埋め込み
テキストとしてシートに書くって事か?

782 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:08:55 ]
とりあえず目的をはっきりさせてくれんと分からん。
DLLの配布が目的なのか、マクロの動作が目的なのか、それともその他、どれだ?

783 名前:デフォルトの名無しさん [2007/08/30(木) 00:15:45 ]
VBAで処理書くのは最後の手段。出来れば避けたい
DLLの関数を使いたい。

メールの添付ファイルみたいにxls中にdllを入れて、
マクロでそれを、dllファイルに書き出して利用したい。
メールはbase64だっけ

マクロの動作が目的



784 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:18:47 ]
オブジェクトの挿入でファイルを添付できるんじゃね?



785 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:20:24 ]
そういうことか。
でもExcelで出来るのかは怪しいな。

786 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:22:00 ]

オブジェクトの挿入で出来たぞ
ちょっと目鱗

787 名前:デフォルトの名無しさん [2007/08/30(木) 00:23:02 ]
>>784
添付はできてるんだけど、マクロでそれをファイルに保存ができない

788 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:45:33 ]
実を言うと、俺も772と同じことを以前やろうとしたんだが、無理だった。
DLLを.xlsファイルに埋め込むことは出来るし、動的にDLL作成することもできるんだけど、
その中から関数を呼び出す方法が無くて。
Declare Function〜は、マクロ実行時にDLLが無いとエラーになるので使えない。
Cなら動的にLoadLibrary()→AddressOf()って方法もあるんだが、VBAの場合、
AdressOf()はコールバックのアドレスにしか使えなくて。

.xlsに埋め込んだ方法だけど、標準モジュールの中に何かの変数(配列)として入れておいた。
それで、実行時にファイルとして書き出す。dllが小さかったから出来た方法だけどね。

789 名前:デフォルトの名無しさん [2007/08/30(木) 00:52:07 ]
標準モジュールの中に何かの変数(配列)として入れておいた。
それで、実行時にファイルとして書き出す。

ここ詳しく教えて


@バイナリデータとして入れておいて
Aバイナリ書き出しでdll作成??

@がよく分からん


790 名前:デフォルトの名無しさん [2007/08/30(木) 00:52:55 ]
今日はもう落ちるんで、朝確認します
よろしくおねがいします


791 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 02:39:36 ]
hisazin-up.dyndns.org/up/src/42670.xls
このエクセルファイルの中にtest()ってマクロがあるから、実行してくれ。
デスクトップにasakusa.jpgっていう画像ファイルができる。
仕組みはソース読め。

792 名前:デフォルトの名無しさん [2007/08/30(木) 07:50:46 ]
>>791
落ちてるorz

長持ちするとこに再うpおねがいします


793 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 09:01:23 ]
>>788
そういうときにはCallWindowProcとかEnumWindowsとかを使えばいいんだよ。

794 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 09:21:12 ]
>>791 はウィルス?
ファイルは存在してるがブロックされる



795 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 12:01:12 ]
>>792
普通に保存できたよ

796 名前:デフォルトの名無しさん [2007/08/30(木) 17:32:03 ]
VBAの変数って多次元の連想配列って無理?
PHP的に書くと $hensu['mojiretsu1'][0] $hensu['mojiretsu2'][1]
みたいな

797 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 17:44:55 ]
collectionにcollectionを格納すれば可能
ちょっと辛いけど

798 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 17:45:13 ]
PHPは知らんからVBA的に書いてくれ

799 名前:デフォルトの名無しさん [2007/08/30(木) 17:57:27 ]
>>797
うええめんどくせえ
DBのSELECT用の関数とかみんなどうやってんだ
$serectData[フィールド名][0] みたいに使えないんでしょ?

>>798
hensu("mojiretsu", 1) みたいな感じかなあ

800 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 18:41:36 ]
const mojiretsu=0 as integer
でいいじゃん

801 名前:デフォルトの名無しさん [2007/08/30(木) 19:31:39 ]
>>791
これはとりあえず出来ました。
ただ、
340kbのDLLが.basにすると700kbくらいになって
それを300kb弱のxlsに入れて保存すると1300kbになって
それを他のシートの値を変更して、上書き保存すると2700kbになったorz


DLLをxlsにOLEオブジェクトで追加して
ActiveSheet.Shapes("Object 1").Copy
ってやるとクリップボードにDLL保存出来て、
手作業でどこかのフォルダに貼り付けは出来たんだけど、
それをマクロでやる方法が見つからなかった。

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

802 名前:デフォルトの名無しさん [2007/08/30(木) 20:07:43 ]
マクロで、オートフィルターの選択を、「すべて」にするようにしたいです。

Selection.AutoFilter Field:=5
でいいのでしょうか?最後の数字の意味がわかりません。

803 名前:デフォルトの名無しさん [2007/08/30(木) 20:50:50 ]
>>799
WSHのDictionaryObject使うと似たようなことはできると思ったよ
ただ凄く遅かったのと、Vbaからは使ったこと無いので自分で調べてみてくれ

804 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:05:39 ]
>>802
F1でヘルプな



805 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:20:58 ]
Dictionaryは使いにくいので書き換えを伴うときはVariant配列にしてしまう
参照用だけならCollectionで決まりなんだけどねぇ

806 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:50:33 ]
もしご存知でしたら教えてください。
Findメソッドに関してなのですが、検索対象に"/"が文字列間に
含まれていると検出してくれません。
例:2007/8/30 など

"/"単体だと検出してくれるのですが、、

これはこのメソッドの使用なのでしょうか?
ぐぐってみたのですが参考になるようなものをみつけれなかったので。。


807 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:59:11 ]
>2007/8/30
文字列じゃないだろ?検出しなくて当然!

808 名前:デフォルトの名無しさん [2007/08/30(木) 23:09:34 ]
VBAでクリップボードにコピーされてるDLLをファイルに落とす方法はありませんか?

809 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:17:42 ]
>>807
ありがとうございます。

テキストボックスに入力された日付をString型の変数に格納したのですが
文字列にはならないのでしょうか?

2007:OK
/:OK
2007/:文字列型じゃない、、

一度SplitしてからFindすることにします。。


810 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:25:27 ]
            ___
          ./    \
          .| ^   ^ |     あまり私をやらせない方がいい
          | .>ノ(、_, )ヽ、.|
         __! ! -=ニ=- ノ!___
    /´ ̄ ̄ .|\`ニニ´/    `ヽ
    ,.、-  ̄/  | l   ̄ / | |` ┬-、
    /  ヽ. /    ト-` 、ノ- |  l  l  ヽ.
  /    ∨     l   |!  |   `> |  i
  /     |`二^>  l.  |  | <__,|  |
_|      |.|-<    \ i / ,イ____!/ \
  .|     {.|  ` - 、 ,.---ァ^! |    | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l
__{   ___|└―ー/  ̄´ |ヽ |___ノ____________|
  }/ -= ヽ__ - 'ヽ   -‐ ,r'゙   l                  |
__f゙// ̄ ̄     _ -'     |_____ ,. -  ̄ \____|
  | |  -  ̄   /   |     _ | ̄ ̄ ̄ ̄ /       \  ̄|
___`\ __ /    _l - ̄  l___ /   , /     ヽi___.|
 ̄ ̄ ̄    |    _ 二 =〒  ̄  } ̄ /     l |      ! ̄ ̄|
_______l       -ヾ ̄  l/         l|       |___|

811 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:44:08 ]
>>808
またおまえか

812 名前:デフォルトの名無しさん [2007/08/31(金) 08:08:37 ]
>>811
方法おしえて

813 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 08:24:16 ]
>>805
Collectionでも書き換え出来るけどね

814 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 09:23:41 ]
>>809
エクセルでは日付は思うように出来ないことも有る。有る意味仕様
一例を挙げると
Sub Cstrのテスト()
Cells(1, 1) = Date
Cells(2, 1) = CStr(Cells(1, 1))
End Sub
トンでもない結果が出ると思う。



815 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 14:18:52 ]
>>814 (809じゃないけど面白そうなんで試してみた)
Cells(1,1) → 2007/8/31
Cells(2,1) → 1931/7/8
ビックリ仕様ですね

816 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 21:55:56 ]
> エクセルでは日付は思うように出来ないことも有る。有る意味仕様
ちゃんと理解してないから思うようにいかないだけ

817 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 06:59:50 ]
>>814
CStrのヘルプみると引数に日付型は有効だけど
Cells(2, 1)の表示形式も日付に変わってる?
これは仕様というよりバグじゃ?

818 名前:デフォルトの名無しさん [2007/09/01(土) 08:32:29 ]
>>814
手元にExcel無いから自信が無いが、確か "'"+CStr(Cells(1,1)) って書けば正常表示された記憶がある
頭が数値の文字列入れるとExcelって数字で判断しちゃうんだよね、バグというより仕様でもいいんじゃね
>>809も頭にアポストロフィを足してやると正常になるかもよ

819 名前:デフォルトの名無しさん [2007/09/01(土) 08:46:18 ]
>>818
訂正
2007/8/31→1931/7/8 って単にアメリカ仕様の mm/dd/yy の形で変換されてるだけじゃん
こりゃバグだね

820 名前:デフォルトの名無しさん [2007/09/01(土) 09:25:30 ]
VBAで別ファイルにあるワークシートへの参照を
そのファイルを開かずに取得するにはどうしたらよいでしょうか?

ワークシート上ではたとえば「='C:\ABC\[DEF.xls]Sheet1'!$A$1」などと指定すれば
開いていないファイルのセルを参照できますが、
これと同じような方法で、たとえば
Dim hoge As Worksheet
Set hoge = ********
のような記述で、開いていないファイルのワークシートを参照するには
どうすればいいのでしょうか?

よろしくお願いします。


821 名前:デフォルトの名無しさん [2007/09/01(土) 12:32:56 ]
試せばいいじゃん

822 名前:820 [2007/09/01(土) 13:09:10 ]
>>821
試す、って何をどう試すのですか??
まさか
set hoge = worksheets("C:\ABC\[DEF.xls]Sheet1")
とかをやれってことですか?
エラーに決まってますが。


823 名前:デフォルトの名無しさん [2007/09/01(土) 13:16:54 ]
横着すんな
発想としてはbookのオブジェクトつくって、そっからシートオブジェクトさらってくるだろ
出来るかはしらないけど

824 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 18:14:30 ]
Executeexcel4macroでってのが定番
ただし参照する量が多いと遅くて使い物にならないので、
結局一回開いてメモリに読みこまないとダメという



825 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 18:30:46 ]
ブックのあるディレクトリに、そのブックのアクティブなシート上のデータを
例えばファイル名sage.txtとしてANSIのtxt形式で保存するVBAのコード教えてください

826 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 18:35:04 ]
ここはクレクレスレじゃないです(><

827 名前:デフォルトの名無しさん [2007/09/01(土) 19:50:19 ]
>>825
FSOでググッてみ

828 名前:デフォルトの名無しさん [2007/09/01(土) 20:03:02 ]
>>711
こういうレスって無価値だな

829 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 20:36:55 ]
>>823
当然できる、けど扱いが難しい
良くないコードだけどこんな感じ

Public Sub MyTest()
Dim wbkTarget As Workbook
Set wbkTarget = OpenBook
MsgBox "シート1の名前は" & wbkTarget.Worksheets(1).Name & "です", vbOKOnly, "Result"
wbkTarget.Close False '※ここでブックの実体を閉じないとゴーストプロセスが残ってしまう
Set wbkTarget = Nothing
End Sub

Private Function OpenBook(Optional ByVal iSheetIndex As Integer = 1) As Workbook
Dim xlApp As Excel.Application
Dim wbkTarget As Workbook
Dim wksSheet As Worksheet
Dim strPath As String
Set xlApp = New Excel.Application
strPath = xlApp.GetOpenFilename("Microsoft Excelブック,*.xls")

Set wbkTarget = xlApp.Workbooks.Open(strPath)
Set wksSheet = wbkTarget.Worksheets(1)
Set OpenBook = wbkTarget
Set wbkTarget = Nothing '※インスタンスは解放されるが実体のブックは開きっぱなし
Set xlApp = Nothing
End Function



830 名前:829 mailto:sage [2007/09/01(土) 21:10:43 ]
俺は一体何を示したかったんだ・・・
どうも疲れてるようだ

Private Function OpenBook(Optional ByVal iSheetIndex As Integer = 1) As Workbook
Dim xlApp As Excel.Application
Dim wbkTarget As Workbook
Dim wksSheet As Worksheet
Dim strPath As String
Set xlApp = New Excel.Application
strPath = xlApp.GetOpenFilename("Microsoft Excelブック,*.xls")

Set wbkTarget = xlApp.Workbooks.Open(strPath)
Set wksSheet = wbkTarget.Worksheets(iSheetIndex)
wksSheet.Name="ほげ"
Set OpenBook = wbkTarget
set wksSheet = Nothing
Set wbkTarget = Nothing '※インスタンスは解放されるが実体のブックは開きっぱなし
Set xlApp = Nothing
End Function

831 名前:デフォルトの名無しさん [2007/09/01(土) 21:33:05 ]
丁寧にコードまで書いてお前優しい奴だな
俺はすぐ噛み付く>>820みたいなの為にそこまでは出来ない

832 名前:デフォルトの名無しさん [2007/09/02(日) 07:28:22 ]
ActiveSheet.ChartObjects(3).Chart.Export "hoge.gif"

のようなグラフのExportで 「400」とだけ書かれたエラーダイアログが出るんだが・・・何なんだこれはorz
ExportをActivateにしても変わらないし・・・



833 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 09:45:41 ]
チラシは日記の裏にでも

834 名前:デフォルトの名無しさん [2007/09/02(日) 09:50:02 ]
EXCEL2007です。
列を挿入すると、挿入列の書式が、挿入位置の左の列と同じになりますが、
これを挿入位置の右の列の書式になるように挿入するには、
どのように指定すれば良いのでしょうか。

よろしくお願いします。




835 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 09:53:46 ]
それはスレ違いだな
手動でできるならそれをマクロ記録

836 名前:デフォルトの名無しさん [2007/09/02(日) 17:36:31 ]
7×7のマスに0〜48の数字をランダムに表示
させることはできますか?
D4は0という条件なのですが。
お願いします。

837 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 17:54:59 ]
>7×7のマスに0〜48の数字をランダムに表示

>D4は0という条件なのですが。
が矛盾している罠。
A1-G7からD4を除いたセルに、1-48を割り振ればいいのかな?
だとしたら、できる。

838 名前:デフォルトの名無しさん [2007/09/02(日) 18:00:09 ]
>>837
お願いします。


839 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:10:56 ]
主語と目的語が無いのはゆとりのデフォだよな

840 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:15:15 ]
ほら

Dim s(1 To 48) As Integer
Dim a As Integer


For i = 1 To 7
For m = 1 To 7
If Not (m = 4 And i = 4) Then
Do
a = Int(Rnd * 48 + 1)
Loop Until (s(a) = 0)
Cells(i, m) = a
s(a) = 1
End If

Next
Next


841 名前:デフォルトの名無しさん [2007/09/02(日) 18:19:34 ]
>>840さん。ありがとうございます。
これで、注意配分の練習したいと思います。

842 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:23:49 ]
ふむ、>837はありがたくないらしい。

843 名前:デフォルトの名無しさん [2007/09/02(日) 18:32:04 ]
>>837>>840には感謝してます。
こんな俺のために・・。
>For i = 1 To 7
プロシージャの外では無効です。
とエラーが出ました。
どのように書き換えればよいのでしょうか?

844 名前:デフォルトの名無しさん [2007/09/02(日) 18:33:47 ]
あ、自己解決しました。
End Subが抜けてた・・。
失礼しました。




845 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 21:47:03 ]
>>844

スレ違いだけど
車掌になるの?


846 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 21:57:47 ]
利用するだけのやつが多い中、ちゃんと報告するだけ偉い

847 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:42:13 ]
まるで脳トレ……つーか、頭スキャンみたいだな。

848 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:32:48 ]
>>845
車掌ってそういう特訓するんだ。知らなかった。

849 名前:デフォルトの名無しさん [2007/09/02(日) 23:38:38 ]
VBAの入門書は一通り読んだ者です。

Sub Macro1()
Dim name(10) As Variant
name(0) = Range("A2").Value
End Sub

のコードが、3行目でエラーになってしまう理由がわかりません。
「修正候補: As」と表示されます。

3行目を
Set name(0) = Range("A2").Value
にすると、エラーでなくなるようです。
Setって、オブジェクト型のデータの格納に使うと読んだので、
この理由もよくわかりません。

よろしくお願いします。

850 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:45:15 ]
名前が悪い

851 名前:デフォルトの名無しさん [2007/09/02(日) 23:57:45 ]
nameって変数名はよくない。
試しにA(10)とかB(10)でやってみなよ。うまくいくから。

nameとかtimeみたいに関数の名前とかプロパティであるような
奴は変数名にしないほうがいい。


852 名前:849 mailto:sage [2007/09/03(月) 00:02:46 ]
>>850
>>851
変数名を変えたら解決しました。
どうもありがとうございます。

853 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 13:36:09 ]
nameが判りやすいから使ったんでしょ?
ヤバイ名前にはMyをつけてMyNaneのようにすれば問題ない。

854 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 14:01:09 ]
my付けるのって「できる大辞典」ユーザーの特徴なんだっけ?

MSの推奨は型名(とスコープ)のプレフィックス付けで、Variant型なら
Dim vntName(10) As Variant
となるわけで、こういった型名(とスコープ)のプレフィックス付けが
VBA(VB言語)以外も含めてコーディング規則では一番一般的なんだが



855 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 14:13:25 ]
キモチワルイ

856 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 14:45:06 ]
少なくとも一番ではないと思う。

ハンガリアン記法 [part1]
pc11.2ch.net/test/read.cgi/tech/1187669648/l50
コーディング規約 第3条
pc11.2ch.net/test/read.cgi/tech/1170599322/l50


857 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 15:05:13 ]
そうでもないか

858 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 21:54:43 ]
まあ命名法は数あれど日本語変数と一文字変数だけは認めたくない

859 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 22:22:26 ]
Forループ用にiとかjとか使うんだけど。

860 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 22:33:41 ]
整数主にカウント用にijk... 座標等にxyあたりは別に普通だろう。
何かしら1文字が予約されてる言語ならもっともだが。

861 名前:デフォルトの名無しさん [2007/09/03(月) 22:42:23 ]
ここに書き込んでいいのか分からないのですが、VBAを使っているのでここに質問させてもらいます。
Levenberg-Marquardt algorithm を使って関数をFittingしたいのですが、英語で書いてあるためか、よく分かりません。
ソースはttp://www.alglib.net/optimization/levenbergmarquardt.phpにあるんですが…。
以下の説明があるんですが、よく分かりません。誰か使い方を教えてください。お願いします。m(_ _)m


862 名前:デフォルトの名無しさん [2007/09/03(月) 22:43:49 ]
'This routines must be defined by the programmer
' Sub FuncVecJac(ByRef X() As Double, _
' ByRef FVec() As Double, _
' ByRef FJac() As Double, _
' ByRef IFlag As Long)


'Routines
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'The subroutine minimizes the sum of squares of M nonlinear finctions of
'N arguments with Levenberg-Marquardt algorithm using Jacobian and
'information about function values.
'
'Programmer should redefine FuncVecJac subroutine which takes array X
'(argument) whose index ranges from 1 to N as an input and if variable
'IFlag is equal to:
' * 1, returns vector of function values in array FVec (in elements from
' 1 to M), not changing FJac.
' * 2, returns Jacobian in array FJac (in elements [1..M,1..N]), not
' changing FVec.
'The subroutine can change the IFlag parameter by setting it into a negative
'number. It will terminate program.
'
'Programmer can also redefine LevenbergMarquardtNewIteration subroutine
'which is called on each new step. Current point X is passed into the
'subroutine. It is reasonable to redefine the subroutine for better
'debugging, for example, to visualize the solution process.
'
'The AdditionalLevenbergMarquardtStoppingCriterion could be redefined to
'modify stopping conditions.

863 名前:デフォルトの名無しさん [2007/09/03(月) 22:44:43 ]
'Input parameters:
' N ・ number of unknowns, N>0.
' M ・ number of summable functions, M>=N.
' X ・ initial solution approximation.
' Array whose index ranges from 1 to N.
' EpsG ・ stopping criterion. Iterations are stopped, if cosine of
' the angle between vector of function values and each of
' the Jacobian columns if less or equal EpsG by absolute
' value. In fact this value defines stopping condition which
' is based on the function gradient smallness.
' EpsF ・ stopping criterion. Iterations are stopped, if relative
' decreasing of sum of function values squares (real and
' predicted on the base of extrapolation) is less or equal
' EpsF.
' EpsX ・ stopping criterion. Iterations are stopped, if relative
' change of solution is less or equal EpsX.
' MaxIts ・ stopping criterion. Iterations are stopped, if their
' number exceeds MaxIts.

864 名前:デフォルトの名無しさん [2007/09/03(月) 22:46:24 ]
Output parameters:
' X ・ solution
' Array whose index ranges from 1 to N.
' Info ・ a reason of a program completion:
' * -1 wrong parameters were specified,
' * 0 interrupted by user,
' * 1 relative decrease of sum of function values
' squares (real and predicted on the base of
' extrapolation) is less or equal EpsF.
' * 2 relative change of solution is less or equal
' EpsX.
' * 3 conditions (1) and (2) are fulfilled.
' * 4 cosine of the angle between vector of function
' values and each of the Jacobian columns is less
' or equal EpsG by absolute value.
' * 5 number of iterations exceeds MaxIts.
' * 6 EpsF is too small.
' It is impossible to get a better result.
' * 7 EpsX is too small.
' It is impossible to get a better result.
' * 8 EpsG is too small. Vector of functions is
' orthogonal to Jacobian columns with near-machine
' precision.
'argonne national laboratory. minpack project. march 1980.
'burton s. garbow, kenneth e. hillstrom, jorge j. more
'
'Contributors:
' * Sergey Bochkanov (ALGLIB project). Translation from FORTRAN to
' pseudocode.



865 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 02:27:11 ]
1文字変数主義者は変数の型とかに気を使わないのが定説
Cなんかやらせたらキャスト地獄で気が狂うだろな

866 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 21:59:14 ]
マクロ初心者なので教えて下さい。
変数Aを10とするマクロXと変数Aを20とするマクロYがあるとして、
それぞれの変数を生かした上でマクロZを共通して使用するように
したいのです。

それぞれでマクロを全文書けば良いだけの話かもしれませんが、
共用できる部分を共用することで容量を減らしたいので…
なお、Application.RunでマクロZを呼び出したら、変数が引き継がれず
エラーになってしまいました。

うまいやり方を教えて下さい。

867 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 22:00:33 ]
ここは初心者育成スレじゃない
最低限のことは覚えてから来てください

868 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 22:33:57 ]
1に
>スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと
とも書いてありますが。

869 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 23:43:32 ]
>>866
何のためにSubやFunctionには引数を追加できると思っている?

870 名前:デフォルトの名無しさん [2007/09/05(水) 00:07:56 ]
それはVBAのスキルであって プログラミングのスキルではないだろ

871 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 07:52:48 ]
globalにpublic宣言すれば参照できたっけ?
X.A Y.Aで

872 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 08:28:05 ]
>>868
で?

873 名前:デフォルトの名無しさん [2007/09/06(木) 05:03:58 ]
VBAって馬鹿にしてたけど
遅ささえ気にならなきゃ、何でもできるんだな
COM使いこなせればの話だけど

874 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 08:30:32 ]
COM無しでもなんでも出来るよ

VBSだとCOM有っての物種だけど
VBAはWin32APIが使えるから、それを使いこなせればCOMなんて不要
ぶっちゃけCOMを使うのではなく、作れる側の言語と同等の仕様なんだから



875 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 12:25:00 ]
いや、Win32APIがあっても、COMはCOMで便利だと思うぞ。
両方で機能が重複しているわけでもないし、
時と場合によって使い分けるものだろ。

876 名前:デフォルトの名無しさん [2007/09/06(木) 14:34:50 ]
このプログラムを日本語訳してくれ!!
ex23.2ch.net/test/read.cgi/morningcoffee/1189055210/

877 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 14:42:03 ]
>>876
>>756

878 名前:デフォルトの名無しさん [2007/09/06(木) 18:39:09 ]
初心者な質問ですが、フォームからシートのサブルーチンを呼び出すのはどうしたらよいですか?

879 名前:デフォルトの名無しさん [2007/09/06(木) 19:30:56 ]
sheet.subproc("パラメータ")

880 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:20:19 ]
>>875
COMが不要だとか便利じゃないなんて話はしてないよ
COM使わなくても、何でも出来るって話なだけで

それに、両方の機能は重複してるというか、COMで出来ることは殆どWin32API(の組み合わせ)で出来る
まあ使い分けた方が手軽ではあるけど、スキルさえあればCOM無しでも事足りるのは事実

881 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:52:19 ]
しつもん
htmlファイルを(テキストでも何でもいいけど)普通にテキスト形式で読み込めませんか

今はループさせて1行毎にLine Inputしてるのですが、
(A1に1行目、A2に2行目、・・・をEOFまで)
なんかもっとこうてっとりばやいというか
File("index.html").copy Sheet1
みたいなの

882 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:53:49 ]
つ[open]

883 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:24:15 ]
>>880
例えばExcelブックの中身いじるなんてことを
Win32APIで現実的にやれるって言うつもり?

884 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:27:13 ]
いやさ、COMを使った時点でVBAの範疇から外れるだろw
WIN32APIでゴリゴリ書くと整った開発環境で作るより
むしろローレベルなプログラムになるよなw



885 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:38:02 ]
Excel VBAでExcelとVBAだけは参照設定から外せないぞ。

確かに、COMコンポーネント一般の話はVBAから外れるが、
Excelブックを操作するのにCOMを使う以上、
VBAにCOMは欠かせない存在だろ。

886 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:45:29 ]
そりゃそうだ。
COMを使えば○○が出来る → VBAすげー
ではないだろってだけだよ。すごいのはCOMだ。

別にCOMもAPIも有用なもんだ。

887 名前:878 [2007/09/07(金) 03:11:01 ]
>>879
サンクス、やってみる

888 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 03:52:09 ]
COMってのを学習するために良いサイトを教えてください

889 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 22:06:12 ]
指定したフォルダ配下のサブフォルダ一覧の取得方法を教えてください

890 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:33:03 ]
Excel2003で作ったVBAのツールをVista + Excel2007の環境にインストールしたら、
読み取り専用として開いてしまい保存ができません。

VBAツールの場合、ユーザー権限の昇格確認を出して管理者権限で実行するには
どうすれば良いでしょうか?


891 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:13:09 ]
>>882
やりたかったこと

Name index.html As index.txt
Workbooks.Open Filename:="index.txt"
を、ファイル名を変えずに

Workbooks.Open Filename:="index.html"
だとタグを勝手に解釈しやがって死ぬ

↓結局今はこう

Open "index.html" For Input As #1
行 = 1
Do Until EOF(1)
Line Input #1 , buf
Cells(行,1) = buf
Loop
Close #1

892 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:23:09 ]
>>889
Dir(指定するフォルダ, vbDirectory)


893 名前:デフォルトの名無しさん [2007/09/08(土) 07:14:41 ]
>>889
Dim FSO As Object
Dim Fds As Object
Dim Fd As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Fds = FSO.GetFolder(FdPath) 'Fdpathにフォルダのパスを指定

For Each Fd In Fds.SubFolders

Fd.Name '←サブフォルダフォルダの名前。やりたい処理を書く。AddiItemとか

Next Fd

Set FSO = Nothing
Set Fds = Nothing

まぁ、間違ってるかもしれないけど。

誰か>>861
スレ違い?

894 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 09:28:57 ]
>>888
VB系だとあまりCOMそのものを勉強する必要はないと思う。
COMのことは裏に隠蔽して普段は意識せずに済むようになっているから。



895 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 11:48:35 ]
>>892>>893
ありがとうございます
ためしてみます

896 名前:デフォルトの名無しさん [2007/09/08(土) 14:26:15 ]
VBAでワークシート関数を使いたいのですが
範囲のところにVBAの変数を指定することは可能でしょうか?
よろしくお願いいたします。

WorksheetFunction.Average(範囲)

897 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 15:47:19 ]
やってみればいいのに

898 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 15:48:08 ]
ホントなんでやってみないんだろ?

Dim Rng As Range
Set Rng = Range("A1:A3")
Debug.Print WorksheetFunction.Sum(Rng)

899 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 09:33:31 ]
名前付き引き数に変数(文字列)を使用したいのですが、どう組んだらよいですか?
ちなみに、:="名前" って感じのものです

900 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 09:59:50 ]
>>899
hlpym!ks!


901 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 14:14:06 ]
Sub sample()

Dim bbb As Integer

Selection.AutoFilter Field:=8, Criteria1:="#VALUE!"
bbb = Rows.SpecialCells(xlCellTypeVisible).Select
Selection.Delete

End Sub

フィルターをかけて「#VALUE!」行を削除したいのですが
上のだと項目名も選んでしまうのですが、何を付け加えたらいいでしょうか
ご指導お願いします

902 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 14:49:29 ]
iserror

903 名前:デフォルトの名無しさん [2007/09/09(日) 15:43:52 ]
Excel VBA とFortran どっちが早いでしょうか?
コンパイラはフリーのものなんですが。
だいぶ違うのでしょうか?

904 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 15:58:44 ]
そりゃぁ、馴れている方が早く書けるだろ。



905 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 16:12:43 ]
>>901
項目名を選ばなかったらいいんじゃないか
それと6行目は何をしたいのかわからない
たぶん不要

906 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 17:31:51 ]
>>903
開発されたのは、Fortranの方がずっと"早い"。


907 名前:デフォルトの名無しさん [2007/09/09(日) 18:41:36 ]
VBAより遅いコンパイラなんてあんのかいな

908 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 18:47:15 ]
腐るほどある

909 名前:903 [2007/09/09(日) 19:00:03 ]
>>904->>908
実行速度です。
使い勝手はExcel VBAがいいんですけど、速さを考えると
Fortranのほうがいいのかなと。セルの参照とかしなければ
いい線いくのかなと。



910 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 20:47:59 ]
なんでもかんでもRange作戦なら実効速度が稼げる
しかしソースが汚くなる諸刃の剣
切羽詰まったやつ以外にはオススメできない

911 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 22:51:08 ]
>>909
計算精度を求めるのならFORTRAN(もしくはCOBOL)

Excelの小数点以下の計算精度は酷い。
VBAで計算するのなら、Currencyとか使うと精度が良いが小数点以下桁数の制限が大きい。

912 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 23:45:16 ]
doubleをlongに入れると親切に四捨五入してくれるからなあ
ずいぶんはまったよ

913 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 01:20:08 ]
>>911
それは、精度がいいんじゃなくて、
Centuryの誤差の出方がDoubleのそれより人間の感覚に近いというだけ。

914 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 01:45:23 ]
世紀の誤差か



915 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 11:08:25 ]
>>913 はCurrencyをCenturyと書き間違えて説得力が低いけど、
>>911 が言う「Excelの小数点以下の計算精度は酷い」は嘘っぽい。
根拠があって言ってる?

916 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 11:44:34 ]
single、doubleとも本来の精度以上に悪いとは思ったことはないが
ただ計算の時にどの型になってるかよくわからないんで
全部cdblにしたりしたな

917 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 18:33:29 ]
>>915
Excelに限定すると

ttp://pc.nikkeibp.co.jp/pc21/special/gosa/eg1.shtml

とか。普通にExcelの参考書類にも載っている話だけれど

918 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 18:56:17 ]
ヒント:丸め誤差

919 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 19:03:02 ]
>>917
それはexcel限定の話じゃない

920 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 19:18:52 ]
>>917
FORTRANでもまったく同じことが起きます。
COBOLは、十進数で計算するのでVBAのCurrencyと同様ですが、
あらかじめ桁数を決めておくのが普通なので、
考えようによってはCurrencyよりも使いにくい場合があります。

921 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 19:24:40 ]
>>917
そのページ、怪しくない?
「0.1 は、実は 0.1000…000555115123…625です」みたいな書き方しているけど、
右側(小数点以下20桁以降)は、ただのゴミ。
それだけの桁数をもっているわけじゃない。

922 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:23:56 ]
>>921
>「0.1 は、実は 0.1000…000555115123…625です」みたいな書き方しているけど、

初心者にも画面上で分かりやすいように画面表示上での最高桁を使っているわけで
説明しやすくするための方便かと。
日経ソフトウェアではなくビジネスマン向けの「日経PC21」だし無駄に厳密にやっても混乱させるだけだし。
一応フォローとして同じ連載中で「IEEE 754浮動小数点数」の仕組みとかもやってるが。

# Excelのワークシート関数利用に関しては結構マニアックな雑誌なので一般ユーザに渡すと結構重宝されたりするけど>日経PC21

あと >>917 の通り、これ以外でもぐぐればいくらでもある。

そういや8bit機であるMSXのBASICの浮動小数点がBCD利用で
PC98のN88-BASIC(86)より精度が高かったことを思い出した
その分、元々遅いのが更に遅くなっているが。

923 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:50:32 ]
BCDなら固定小数点じゃないの?

924 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:17:50 ]
>>922
どんだけぐぐったって、Excelの小数点以下の計算精度がFortranよりも酷い
なんてことが書いてあるページは見つからないと思うけど。




925 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:21:21 ]
何故10進型を使おうとしない

926 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:22:01 ]
922ってそんなこと主張してるか?

927 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:22:20 ]
>>923
MSXのMATHPACKはBCD浮動小数点が使えたはず。

928 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:27:30 ]
まあ考えたらBCDでも浮動小数点は可能だな

>>925
足し算引き算ぐらいなら使ってもいいが


929 名前:デフォルトの名無しさん [2007/09/10(月) 23:32:37 ]
もうちょっとCPUが賢く安くなれば
10進数浮動小数点演算器載せるだろうな、あと何年待てばいんだろ

930 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:35:51 ]
>>924
明らかに >>921-922 の流れはFORTRANとは無関係です。
Excelに対するFORTRANの計算精度の優位性について言及しているのは >>911 だけだし。

FORTRANはよく知らないが同じBASICでもMSXと98で精度が異なるように、処理系依存の部分も多い希ガス

931 名前:デフォルトの名無しさん [2007/09/10(月) 23:39:59 ]
つうか計算精度なんて言語じゃなくてCPUの性能によるんじゃないの?
まぁソフトだけで計算すりゃ精度は出るだろうが、馬鹿みたいに遅い気がする

932 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:43:21 ]
言及ったってどう酷いかいってくれないとなあ

933 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:44:44 ]
だから10進型使えっつーの

何が優位性だ半可通が

934 名前:デフォルトの名無しさん [2007/09/10(月) 23:51:30 ]
まぁ世の中の殆どは近似値で事足りる
精度のいるモノは高いアプリやらマシーン使ってるだろうし
浮動小数点使って馬鹿みたいなプログラムを組むと引っ掛かる



935 名前:デフォルトの名無しさん [2007/09/11(火) 00:17:13 ]
メールについて質問!

VBAからダイレクトにメールを打つサンプルはよくあるんですが、
メーラーを開き、新規メール画面にセルの文字列を入れて、送信はしない、
って状態を作りたいのですが、どうすれば良いでしょうか?

メーラーはOutlook Expressじゃなく、「通常使うメーラー」を使いたいです。

よろしくお願いします。

936 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:30:08 ]
>>935
メーラーにコマンドラインで渡せばいいんじゃないか

937 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 02:39:14 ]
Select Caseの分岐に変数のリストを渡して使えないでしょうか

Dim IntA = "1,3,5" As Integer
Dim IntB = "2,4,6" As Integer

Select Case Int
   Case IntA
      〜
   Case IntB
      〜

みたいな。
上のだと当然型エラーが出るし、stringにすると「1,3,5」という文字列にマッチしてしまう

たくさんのわりとランダムっぽい数値で分岐させたく、
なおかつよく数値が変更されるので見通しの良いところにおいておきたいのです。

938 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 06:53:59 ]
ヒント:偶数、奇数

939 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 06:56:43 ]
ってランダムか
規則性がないものは都度判定するか連想配列に登録するしかないと思われ

940 名前:935 [2007/09/11(火) 07:41:35 ]
>>936
ありがとうございます。
今、メーラーはBeckyなのですが、Becky側では、コマンドラインから
セット出来るのは、宛先To:のみなので、本文を処理出来ません。。
通常使うメーラー、無理なもんですかね?

941 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:30:21 ]
mailto:で呼び出したらいいんじゃないかな?
本文とかも指定できる。
ttp://www.shurey.com/Soft/JavaScript/mailto.html

942 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 19:04:00 ]
>>937
実際の分岐条件イメージが涌かないが、まずはHELPの使用例見ろ
その上での話なら、変則ではあるがこのようなやり方もある
Select Case True
   Case 条件式1
      〜
   Case 条件式2
      〜
   Case Else



943 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 19:28:45 ]
> 変則ではあるが
その手法は基本だろ?

944 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:51:56 ]
基本は
if 条件式 then
elseif 条件式
end if



945 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 21:50:07 ]
>>944
if 条件式 then
elseif 条件式 then
end if



これも基本だし>>942も基本のうち

946 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 23:17:18 ]
elseifなんかソース汚くなるしLIKE演算子に用があるときぐらいしか使わんわ

947 名前:デフォルトの名無しさん [2007/09/11(火) 23:54:01 ]
で?

948 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 00:33:43 ]
>>937の例だと
select case hoge
case 1,3,5
case 2,4,6
end select
とかでいいんでないの
magic numberだが

949 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 01:27:54 ]
>>946
ハゲは黙ってろw

950 名前:デフォルトの名無しさん [2007/09/12(水) 15:29:00 ]
>>937
配列渡しの関数作って戻り値をIF文で判定するしかないじゃね
select文に拘ってもしょうがない

951 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 20:45:54 ]
質問です。
本日、面接に行ったところ、1週間でVBAで計算機を作って来いと言われました。
ちなみに、VBAどころかプログラム自体、一切触ったことありません。

で、まだソース部分は全く手付かずなのですが、
ユーザフォームに0〜9ボタンや、+、-などのボタンとテキストボックスを貼り付け、
ボタンを押して、値なり結果をテキストボックスに返す感じで行きたいなと。
ただ、ユーザフォーム上で計算機としての動作が可能なのか、
アプローチが最初から間違っていないか、その点を教えていただきたいです。

探し方が悪いとは思うのですが、そういったものを紹介しているサイトも
見つけられなかったものですから…


952 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 20:51:35 ]
>>951
ちなみに面接官もここチェックしてるから


953 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 21:10:17 ]
vbaじゃなくてvisual basicで探せ

954 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 21:41:02 ]
>>951
それを自力で出来るかどうかを見てるわけだから不正をせず自力でやりましょう
不正をして採用されても、能力以上のことばかり要求されて辛い思いをするのは君ですよ

自分の能力に見合ったものを選ぶか、上を目指したければズルすることではなく己を高めることを考えましょう



955 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 22:08:06 ]
>>951
ひとつだけ言っておく

>ユーザフォーム上で計算機としての動作が可能なのか

可能

956 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 22:09:28 ]
>>951
考え方は合ってる
数字ボタン:値の取得
加減乗除などのボタン:フラグ
って考えれば良い


957 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:15:12 ]
"を文字列として扱いたいのですが、例えば
"My name is nanashi"という具合に"(半角)まで表示させるにはどうすればいいでしょうか?
環境はExcel2003です。

Dim tk as string
tk=""My name is nanashi""
だとエラーが出ます。

たぶん
 tk=???&"My name is nanashi" &???
が正解であると思うのですが???に何を入れればいいのか思い出せません。
PC-98時代のベーシックならCHR(??)だったような記憶があるのですが、VBAの場合どうすればいいのでしょうか?
お願いします。

958 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:18:56 ]
ググレカス

959 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:31:11 ]
>>957
Msgbox """ぐぐれ"""

960 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:42:44 ]
奇数個をはさんでも偶数個に修正するんだな

961 名前:デフォルトの名無しさん [2007/09/13(木) 01:58:19 ]
>>957
実はVBAにもCHRあるから同じように書ける






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<289KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef