●EXCEL・VBA質問スレ ..
[2ch|▼Menu]
702:デフォルトの名無しさん
07/08/24 01:24:03
>>701の注意点

シートの名称がイマイチ意味不明なのでとりあえずcintしたが、
これがSheet1とかのパターンが出てくると間違いなくエラーになるので、
isnumericで事前に回避するか、Sheet1系統でOKの場合は
"Sheet"&カウントで文字列連結してstrcompで見てやる必要がある。

今後の注意点
・1文字変数は使わない
・Activate,Select系は使わずオブジェクト経由でアクセスすること
・A1形式は極力使わない
・上記に伴いRangeを使う場面ではCellsで展開してから使用する
・セルに入れる値が日付や文字列や数値など、フォーマットが決まっている場合は
表示形式をNumberformatなどで事前に指定してやる

703:デフォルトの名無しさん
07/08/24 01:32:20
>>702
これって2月とかエラーにならね?
普通にDateAdd使えば?

704:703
07/08/24 01:33:57
うっは流し読みしすぎた

>dtDate = "2007/08/01"

で8月限定にしてんのか。すまん

705:デフォルトの名無しさん
07/08/24 02:46:23
X軸の数値 Y軸の数値
0 -1.5e-9
10 2.5e-8
20 4e-8
30 5e-7
40 6e-5
50 9e-3

のようなデータををX軸は普通、Y軸を対数にしてグラフ化しようとすると、
負の数を入力しようとしています。対数には負の数が入りませんとかエラーが
出ます。(それは当然分かります)
強行すると、この場合、X軸が0の場合を除いてグラフにしてくれます。

動作としてはそれで問題ないのですが、大量にグラフを作成しようとすると、
毎回エラーが出てうざったいのです。なんとかエラーメッセージを消去
して出なくしたいのですが、いい方法はないでしょうか。


706:デフォルトの名無しさん
07/08/24 02:53:19
>>705
事前に負の値を取り除く。

707:705
07/08/24 03:00:08
>>706
やはり、そういう感じでやるしかないのですか・・・
今はABSで絶対値にして逃げてるのですが。

708:デフォルトの名無しさん
07/08/24 05:38:20
そもそも負の値をとりうるデータを対数変換するってデータ処理としてどうよ?

709:デフォルトの名無しさん
07/08/24 07:38:02
>>707
それはおかしいだろう。対数を取りたいってことは負値はIllegalなんでないの?
或いは全体にオフセットを足すべきだったりはしない?

710:デフォルトの名無しさん
07/08/24 11:13:05
EXCEL VBAでフォームを使用して、ユーザーに
ファイルを選択してもらう仕組みを作りたいんですが可能でしょうか?

「参照」ボタンを用意して、ユーザーがクリックすると
フォルダ内のファイルが一覧表示されて、指定できるようなイメージです。

711:デフォルトの名無しさん
07/08/24 12:05:25
出来ますよ

必要なコントロールを配置して
> 「参照」ボタンを用意して、ユーザーがクリックすると
> フォルダ内のファイルが一覧表示されて、指定できる
をコードにすれば良いだけです

712:デフォルトの名無しさん
07/08/24 12:06:32
>>710
Dialogsオブジェクト

713:710
07/08/24 13:12:05
>>711,712
ありがとうございました!
ちょっと調べてみます!!


714:デフォルトの名無しさん
07/08/24 22:40:24
"俺の関数"というファイルにあるテーブルをVlookupした値を加工するユーザー定義関数を、"俺の関数.xla"の標準モジュールに作成しました。
他のファイルから"俺の関数"アドインを有効にしてみましたが、利用できません。どうすればいいですか?

Public Function 俺の関数(key)
fjFilename = "D:\Settings\俺\Application Data\Microsoft\AddIns\俺の関数.xla"
俺の関数 = WorksheetFunction.VLookup(key, Workbooks(fjFilename).Range("テーブル"), 2, 0)+1+2+3
End Function



715:デフォルトの名無しさん
07/08/25 10:10:50
>>710
Application.GetOpenFilename


716:デフォルトの名無しさん
07/08/26 09:28:40
URLリンク(sv2.st-kamomo.com)

競馬の出走馬が並んだデータなのですが
これをレースごとに他のシートにコピペすることはVBAで可能でしょうか?

ちなみにレース場所は毎回異なります。

717:デフォルトの名無しさん
07/08/26 09:33:42
可能

718:デフォルトの名無しさん
07/08/26 09:34:33
>>717
可能だとするとどう命令すべきでしょうか?

719:デフォルトの名無しさん
07/08/26 09:41:35
>>718
「やれ!」

720:デフォルトの名無しさん
07/08/26 09:47:09
(・c_・` )ソッカー

721:716
07/08/26 11:23:09
マクロではできましたが今週の競馬開催の場所が毎回変わりますから
そこができないですね・・・


722:デフォルトの名無しさん
07/08/26 11:50:17
出来るけど、何か?
君が出来ないなら努力不足

723:デフォルトの名無しさん
07/08/26 11:54:41
>これをレースごとに他のシートにコピペすることはVBAで可能でしょうか?



これをレースごとに他のシートにコピペすることはVBAで可能ですが、
どうやったらいいでしょうか?

724:デフォルトの名無しさん
07/08/26 12:09:18
マクロまでできたらそのマクロをいじれ
どういじればいいかは学べ


725:デフォルトの名無しさん
07/08/26 12:20:18
手でコピペは出来るんでしょ。
レースごとに分割する基準は何?
それをマクロに書けばいいだけ。

726:デフォルトの名無しさん
07/08/26 12:23:37
>レースごとに分割する基準

場所+レース番号  例) 札幌 9

または 馬番1〜大外枠

・・・

727:デフォルトの名無しさん
07/08/26 12:45:05
まずシートを作って

Sheets.Add
ActiveSheet.Name = 場所+レース番号  例) 札幌 9

あとは判るだろ

728:デフォルトの名無しさん
07/08/26 12:53:39
>>727
いやそれは分かるんだけどさ
競馬って毎週「札幌」があるわけじゃないのよ
10箇所以上の場所から2つ3つあるわけで・・・

729:デフォルトの名無しさん
07/08/26 13:04:45
変数
ヘルプ
これ以上書くことないな!

730:デフォルトの名無しさん
07/08/26 14:25:56
VBAマスターするコツってありますか?
反復演習・努力ですかね?

731:デフォルトの名無しさん
07/08/26 14:29:24
そもそも何を持ってマスターしたと言えるのか
誰もわからない(あるいは人によってマスターの基準が大きく異なる)ので、
誰もマスターしたなんて言わない。

732:デフォルトの名無しさん
07/08/26 14:53:26
初心者用の1冊をマスターしても実用性はないよな

733:デフォルトの名無しさん
07/08/26 16:24:13
最初は初心者用の入門書のとおりに実際に動かしてみる。
(一週間程度)

次は、簡単なオリジナルのコードを沢山作る。その際
他人に質問しないで自力で検索したりヘルプを見たりする。←最も重要
同時にVBA掲示板を閲覧し自分のレベルにあった質問で勉強する。
未だ、自分で質問はしない方が良いと思う。
(一ヶ月程度〜数年以上)

そのうち、ヘルプを見れば理解できるようになる。このレベルになれば
他人に質問しても相手に失礼じゃないと思う。

スクール行ったって資格は取れるかもしれないが実力がつくとは限らない。
やる気があれば独学で十分だとおもう。

734:デフォルトの名無しさん
07/08/26 16:46:44
俺の頭脳じゃ100年経ってもできないっぽい
実現させるには達人に出会ってお金を出して作ってもらう他ないな・・・

735:デフォルトの名無しさん
07/08/26 18:08:50
>>733
それ以前に、一般機能をひと通り理解してないと無理じゃない?

736:デフォルトの名無しさん
07/08/26 18:14:25
何を馬鹿なことを…

初心者用の本は斜め読み。
必要そうなとこだけを重点的に。
使いたいときだけさっと調べ(本屋、GOOOOOOOGLE)

出来そうじゃなかったらあきらめる。(どうしてもVBAでMSNメッセンジャー作りたいんです >< )

737:デフォルトの名無しさん
07/08/26 18:26:56
VBA本は初心者本ばかりか上級者向けとされている本ですら、
変数の命名規則が不明(どころか明示すらしない)だとか、見やすいコーディングを
考えないとか、速度に触れていないとか、後始末を省略してるとか、コレクションとか
クラスの使用法が全く記載されてないとか、そんなのばっかだから、その手の本の
まんまのコーディングはあんまり業務としての実用性はない
Excelレガシー問題ってこういう本の氾濫が大きいと思う
結局、リファレンスだけあればいいってことになる

738:デフォルトの名無しさん
07/08/26 18:35:13
初心者はプログラム自体にとっつきにくさと
わかりづらさから飽きがきやすいので
かなり偏った内容でも、とにかく楽しく、とにかく簡単で
実際にプログラミングしてみて動かせるような本が好ましい。
サンプルのついた本は腐るほどあるけど
一生使いもしないような題材だと萎えるから
そこのとこも吟味してほしい。



739:デフォルトの名無しさん
07/08/26 18:40:28
だからこそ>>736なんだが。
それにね、途中で興味がなくなったらそれはそれでいいんだよ。
VBAは何かの手段であって目的じゃないはず。
C++やc#でもやればいいんだよ。

740:デフォルトの名無しさん
07/08/26 20:57:33
>>735
そうですね。
一般機能のIF関数やVLOOKUPを使いこなせない人は苦労しそうだね?

741:デフォルトの名無しさん
07/08/26 21:36:12
自分に降りかかる/手が出せる範囲の仕事で滞りなく使えること。
VB「A」なら、↑でマスターしたって言っていいでしょ。
ということは「自分の仕事でVBA使って自動化/効率化したいこと」が
最高の教材になるんじゃないか?

職業プログラマの人は知らんけど。
もしそうなら別の言語マスターした方がよさそうだし。

742:デフォルトの名無しさん
07/08/26 21:43:30
VBAは簡単なのがいいね
C言語に何度も挫折した俺でも使える
VBにステップアップしようとしたけど.NET何たらになってて
よくわからなくて結局VBAに戻ってきた

743:デフォルトの名無しさん
07/08/26 22:12:14
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set d = Worksheets(2).Range("a1:a500").Find(2, lookin:=xlValues)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

Loopんところでオブジェクトが無いとかって
エラーになるんですけどなんでですか?
途中で違うFindするとcの方のFindが無効になっちゃうのでしょうか?

744:デフォルトの名無しさん
07/08/26 23:13:40
ちゃんと例外処理しろよ

745:デフォルトの名無しさん
07/08/26 23:22:45
Loop While Not c Is Nothing And c.Address <> firstAddress

両方評価してからアンドの評価するからアウト



746:デフォルトの名無しさん
07/08/27 06:58:40
きたねーコードだな

747:743
07/08/27 09:52:45
>743ですが、Findのヘルプに載っている
使用例に下記一行を加えただけです。

Set d = Worksheets(2).Range("a1:a500").Find(2, lookin:=xlValues)


この一行が無ければ、動きます。
この一行を追記しただけでエラーになる理由が知りたいです。


748:デフォルトの名無しさん
07/08/27 12:55:18
なんで解らないのかが知りたいです。

749:デフォルトの名無しさん
07/08/27 14:11:31
>>747
むしろヘルプをコピっただけで
エラーになる俺に動く方法を教えてけれ

>c.Value = 5
をコメントアウトしないと
>Loop While Not c Is Nothing And c.Address <> firstAddress
のところで
cがNothingだから
c.Addrssがエラーになる

Loopのなかに
If c Is Nothing Then Exit Do
とか入れれば問題ないけど
これってヘルプが間違ってんの?
それとも条件しだいでは問題ないの?

750:デフォルトの名無しさん
07/08/27 14:34:19
>>743
> Loopんところでオブジェクトが無いとかって
> エラーになるんですけどなんでですか?
エラーメッセージを正確に書き写せばいいのに。
簡単な英語もわからないと不便だね。

751:デフォルトの名無しさん
07/08/27 18:21:56
エラーって日本語だろ?

752:デフォルトの名無しさん
07/08/27 20:16:40
屁理屈ばっかごねてるヴァカ

753:デフォルトの名無しさん
07/08/28 20:15:47
Excelのオートフィルタ機能を関数で表したいと思うのですが可能でしょうか
教えて下さい

754:デフォルトの名無しさん
07/08/28 22:05:01
ググレカス

755:デフォルトの名無しさん
07/08/28 22:05:53
>>753
> 可能でしょうか

お答えします、可能です
やり方は自分で調べてください


756:デフォルトの名無しさん
07/08/29 09:31:53
これを日本語訳に直してもらえないでしょうか?

Sub TTT()
Dim iR As Integer, iT As Integer, iK As Integer, iM As Integer

For iR = 1 To Cells(1, "A").SpecialCells(xlLastCell).Row
Select Case Cells(iR, "A")
Case "高橋"
iT = iT + 1
Sheets("高橋").Cells(iT, "A") = Cells(iR, "A")
Sheets("高橋").Cells(iT, "B") = Cells(iR, "B")
Case "亀井"
iK = iK + 1
Sheets("亀井").Cells(iK, "A") = Cells(iR, "A")
Sheets("亀井").Cells(iK, "B") = Cells(iR, "B")
Case "道重"
iM = iM + 1
Sheets("道重").Cells(iM, "A") = Cells(iR, "A")
Sheets("道重").Cells(iM, "B") = Cells(iR, "B")
End Select
Next
End Sub

757:デフォルトの名無しさん
07/08/29 09:38:03
潜水艦TTT()
薄暗さ、不-、整数、それ、整数、整数としてのiK、不-、整数

セル(1、「A」).SpecialCells(xlLastCell)の.Rowの選んだケースセルへの不-
=1、(不-、「A」) ケース"高橋"
それ=それ、+1
シート("高橋").Cells、(それ、「A」) =セル(不-、「A」)
シート("高橋").Cells、(それ、「B」) =セル、(不-、「B」) ケース"亀井"
iK iK=+1
シート("亀井").Cells(iK、「A」)=セル(不-、「A」)
シート("亀井").Cells(iK、「B」)=セル、(不-、「B」) ケース"道重"
不-=不-+1
シート("道重").Cells、(不-、「A」) =セル(不-、「A」)
シート("道重").Cells、(不-、「B」) =セル、(不-、「B」)終わりは次の終わ
りの潜水艦を選択します。

758:デフォルトの名無しさん
07/08/29 10:27:52
日本語になってねー

759:デフォルトの名無しさん
07/08/29 10:43:53
逆に言えば元の756だって英語か何かになっていたかというと、そうではないということ。
それはVisual Basicという言語なのだから。

760:デフォルトの名無しさん
07/08/29 10:53:21
それ以前に756動作しないし? 俺も釣られた?

761:デフォルトの名無しさん
07/08/29 12:42:40
>>760
元々別のシートにあるデータをコピペする動作だからね
マジで>>756どう構造か教えて欲しい

TTT というのは任意のタイトルだよね
Dim iR As Integer は整数型の変数の宣言だよね 

その後のTo Cells とか SpecialCells(xlLastCell).Row とかが分からん


762:デフォルトの名無しさん
07/08/29 12:47:13
元のワークシートから名前別のワークシートにA列とB列の値を転記してるだけやん

763:デフォルトの名無しさん
07/08/29 13:54:32
>>756
Cells プロパティの記述が変体的?

764:デフォルトの名無しさん
07/08/29 14:09:33
ダメだ全然ワカンネ
VBAの初心者向きの本も理解できねぇ('A`)

765:デフォルトの名無しさん
07/08/29 14:33:56
VBAでプログラムを勉強しようとするのは無謀だな
VBの知識があってマクロ記録のソースから覚えれば早い

766:デフォルトの名無しさん
07/08/29 14:34:40
初心者向きなのに解かりづらい本が多いからね。

 ↓ こっちのサイトが私にはわかりやすい。
URLリンク(www6.plala.or.jp)

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

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

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

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

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

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

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

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

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

775:デフォルトの名無しさん
07/08/29 23:37:36
>>772
ない。DLLはDLL。
素直にDeclare宣言して関数使いましょう。


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

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

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

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

778:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/30 00:03:16
いや、DLLはDLLなんだからファイル自体別。
埋め込むってのがよく分からんが、
DLLの配布がNGなら
DLLの関数をVBAで組めばいいって話じゃ済まないの?
要するに、DLLは無くして全部VBAで書けって話。
ダメなん?

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

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

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

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

マクロの動作が目的



784:デフォルトの名無しさん
07/08/30 00:18:47
オブジェクトの挿入でファイルを添付できるんじゃね?

785:デフォルトの名無しさん
07/08/30 00:20:24
そういうことか。
でもExcelで出来るのかは怪しいな。

786:デフォルトの名無しさん
07/08/30 00:22:00

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

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

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

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

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

ここ詳しく教えて


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

@がよく分からん


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


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

792:デフォルトの名無しさん
07/08/30 07:50:46
>>791
落ちてるorz

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


793:デフォルトの名無しさん
07/08/30 09:01:23
>>788
そういうときにはCallWindowProcとかEnumWindowsとかを使えばいいんだよ。

794:デフォルトの名無しさん
07/08/30 09:21:12
>>791 はウィルス?
ファイルは存在してるがブロックされる

795:デフォルトの名無しさん
07/08/30 12:01:12
>>792
普通に保存できたよ

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

797:デフォルトの名無しさん
07/08/30 17:44:55
collectionにcollectionを格納すれば可能
ちょっと辛いけど

798:デフォルトの名無しさん
07/08/30 17:45:13
PHPは知らんからVBA的に書いてくれ

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

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

800:デフォルトの名無しさん
07/08/30 18:41:36
const mojiretsu=0 as integer
でいいじゃん

801:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/30 20:07:43
マクロで、オートフィルターの選択を、「すべて」にするようにしたいです。

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

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

804:デフォルトの名無しさん
07/08/30 22:05:39
>>802
F1でヘルプな

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

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

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

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


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

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

809:デフォルトの名無しさん
07/08/30 23:17:42
>>807
ありがとうございます。

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

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

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


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

811:デフォルトの名無しさん
07/08/30 23:44:08
>>808
またおまえか

812:デフォルトの名無しさん
07/08/31 08:08:37
>>811
方法おしえて

813:デフォルトの名無しさん
07/08/31 08:24:16
>>805
Collectionでも書き換え出来るけどね

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

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

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

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

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

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

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

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

よろしくお願いします。


821:デフォルトの名無しさん
07/09/01 12:32:56
試せばいいじゃん

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


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

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

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

826:デフォルトの名無しさん
07/09/01 18:35:04
ここはクレクレスレじゃないです(><

827:デフォルトの名無しさん
07/09/01 19:50:19
>>825
FSOでググッてみ

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

829:デフォルトの名無しさん
07/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
07/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:デフォルトの名無しさん
07/09/01 21:33:05
丁寧にコードまで書いてお前優しい奴だな
俺はすぐ噛み付く>>820みたいなの為にそこまでは出来ない

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

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



833:デフォルトの名無しさん
07/09/02 09:45:41
チラシは日記の裏にでも

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

よろしくお願いします。


835:デフォルトの名無しさん
07/09/02 09:53:46
それはスレ違いだな
手動でできるならそれをマクロ記録

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

837:デフォルトの名無しさん
07/09/02 17:54:59
>7×7のマスに0〜48の数字をランダムに表示

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

838:デフォルトの名無しさん
07/09/02 18:00:09
>>837
お願いします。


839:デフォルトの名無しさん
07/09/02 18:10:56
主語と目的語が無いのはゆとりのデフォだよな

840:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/02 18:19:34
>>840さん。ありがとうございます。
これで、注意配分の練習したいと思います。

842:デフォルトの名無しさん
07/09/02 18:23:49
ふむ、>837はありがたくないらしい。

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

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


845:デフォルトの名無しさん
07/09/02 21:47:03
>>844

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


846:デフォルトの名無しさん
07/09/02 21:57:47
利用するだけのやつが多い中、ちゃんと報告するだけ偉い

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

848:デフォルトの名無しさん
07/09/02 23:32:48
>>845
車掌ってそういう特訓するんだ。知らなかった。

849:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/02 23:45:15
名前が悪い

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

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


852:849
07/09/03 00:02:46
>>850
>>851
変数名を変えたら解決しました。
どうもありがとうございます。

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

854:デフォルトの名無しさん
07/09/03 14:01:09
my付けるのって「できる大辞典」ユーザーの特徴なんだっけ?

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

855:デフォルトの名無しさん
07/09/03 14:13:25
キモチワルイ

856:デフォルトの名無しさん
07/09/03 14:45:06
少なくとも一番ではないと思う。

ハンガリアン記法 [part1]
スレリンク(tech板)l50
コーディング規約 第3条
スレリンク(tech板)l50


857:デフォルトの名無しさん
07/09/03 15:05:13
そうでもないか

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

859:デフォルトの名無しさん
07/09/03 22:22:26
Forループ用にiとかjとか使うんだけど。

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

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


862:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/04 02:27:11
1文字変数主義者は変数の型とかに気を使わないのが定説
Cなんかやらせたらキャスト地獄で気が狂うだろな

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

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

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

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

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

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

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

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

872:デフォルトの名無しさん
07/09/05 08:28:05
>>868
で?

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

874:デフォルトの名無しさん
07/09/06 08:30:32
COM無しでもなんでも出来るよ

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

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

876:デフォルトの名無しさん
07/09/06 14:34:50
このプログラムを日本語訳してくれ!!
スレリンク(morningcoffee板)

877:デフォルトの名無しさん
07/09/06 14:42:03
>>876
>>756

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

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

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

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

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

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

882:デフォルトの名無しさん
07/09/06 21:53:49
つ[open]

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

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

885:デフォルトの名無しさん
07/09/06 22:38:02
Excel VBAでExcelとVBAだけは参照設定から外せないぞ。

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

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

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

887:878
07/09/07 03:11:01
>>879
サンクス、やってみる


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4213日前に更新/289 KB
担当:undef