[表示 : 全て 最新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/

736 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 18:14:25 ]
何を馬鹿なことを…

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

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

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

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



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

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

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

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

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

743 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:13:40 ]
ちゃんと例外処理しろよ



745 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:22:45 ]
Loop While Not c Is Nothing And c.Address <> firstAddress

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



746 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 06:58:40 ]
きたねーコードだな

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

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


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


748 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 12:55:18 ]
なんで解らないのかが知りたいです。

749 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 14:34:19 ]
>>743
> Loopんところでオブジェクトが無いとかって
> エラーになるんですけどなんでですか?
エラーメッセージを正確に書き写せばいいのに。
簡単な英語もわからないと不便だね。

751 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 18:21:56 ]
エラーって日本語だろ?

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

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

754 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:05:01 ]
ググレカス



755 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:05:53 ]
>>753
> 可能でしょうか

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


756 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん [2007/08/29(水) 10:27:52 ]
日本語になってねー

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

760 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 10:53:21 ]
それ以前に756動作しないし? 俺も釣られた?

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

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

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


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

763 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 13:54:32 ]
>>756
Cells プロパティの記述が変体的?

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



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

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という条件なのですが。
お願いします。






[ 続きを読む ] / [ 携帯版 ]

前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