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


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

Excel VBA質問スレ Part5



1 名前:デフォルトの名無しさん [2007/12/12(水) 17:27:44 ]
ExcelのVBAに関する質問スレです

質問前に 【 >>2-3 】 あたりを良く読むこと

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

662 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 11:49:56 ]
>>661
エラーメッセージは出ませんでしたか?
恐らく、>653のようなダイアログが出たと思うのですが。
それを見ても何も理解できないようなら人間やめた方が宜しいかと。

663 名前:659 [2008/02/05(火) 11:55:57 ]
>>662
textbox1 の変数が定義されていません と出ますね。
いちおう、フォームでtextbox1は作っているんですよ。

664 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 12:41:37 ]
>>663
標準モジュールに記述してるんだったら、
Range("A1").Value にしろ TextBox1.Value にしろ、未定義扱いになると思うが?
(どこに属するオブジェクトか判断できない。明示的に指定されていない。)


665 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 12:48:53 ]
シートから実行してしまうと、Rangeの方は未定義にならない罠。

666 名前:664 mailto:sage [2008/02/05(火) 12:55:45 ]
>>665
うを、ホントだ。素で知らんかった。Activesheetを拾うっぽいね。 どうもありがd。


667 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 13:56:32 ]
>>664
その定義方法がですね、textboxから、プロシージャをcallする場合は
分かるのですが、この逆になると、textboxのchangeなのかenterなのか
keydownなのかどこで定義したらいいのか・・・そもそも不可能なのか・・

668 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 14:10:50 ]
>>667
イベントプロシージャを使うつもりなら、どのイベントで処理するか決めるだけじゃないの?
つか、どういう動きをさせたいの?


669 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 14:11:31 ]
>>667
もしかして、フォームのプロシージャから標準モジュールをサブルーチンとして使いたいのか?
だとしたら、フォーム自身なりテキストボックス自身をそのtest()に渡してやればいい。
やりたいこととやっていることの説明くらいできないようじゃ、先が思いやられるけどね。

670 名前:デフォルトの名無しさん [2008/02/05(火) 15:14:50 ]
お付き合い頂き感謝します。
標準モジュールから、ユーザーフォームのテキストボックスを呼び出して、
なおかつそのテキストボックスに任意の文字列を表示させたいです。

テキストボックスのプロシージャから、標準モジュールを呼び出すのは
何とかできるのですが、逆がどうしても出来ません・・



671 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 15:18:49 ]
面倒だから、全ての自作オブジェクトの一覧と全てのプロシージャの一覧出しちゃえよ。
状況説明できない馬鹿にいくら聞いても説明しても無駄だって判ったからさ。

672 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 15:21:08 ]
>>670
いや、だから・・・
何かしらの処理が実現できない、っていう相談じゃなくて、コードの書き方が分からんってこと?

標準モジュールに記述したプロシージャは、どこかから呼ばれるまでは処理が走らない。
その前提の上で、特定のフォームの部品を扱いたいなら、○○(Userform名).Textbox1
例えば、デフォルトのオブジェクト名であれば、Userform1.Textbox1.Value でアクセスできる。
TextBox1.Value だけでは対象が分からんからエラーになる。 単にValue とだけ書くようなもん。


673 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 15:24:36 ]
うぜーーーー

Sub foo()
  UserForm1.TextBox1.Text = "abc"
  UserForm1.Show
End Sub

674 名前:672 mailto:sage [2008/02/05(火) 15:29:26 ]
>>670
あー、ごめん、よく考えたら 672の書き方じゃ絶対に分からんな。
まずはフォームの実体を取得しなきゃならんので、どこかから呼び出されるのを前提で、
”基本的には”標準モジュールのプロシージャに引数として処理対象のオブジェクトを渡すか、
フォームのインスタンスを作るトコから全て標準モジュールの処理で書かないといけない。


675 名前:デフォルトの名無しさん [2008/02/05(火) 15:39:12 ]
>>972-974
でけた^^
コードの書き方の問題なのかも分かりませんでした・・orz
ありがとうございました!

676 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 15:40:29 ]
感謝まで明後日の方向向いているよ。どうしようもねぇな。

677 名前:672 mailto:sage [2008/02/05(火) 15:42:12 ]
ワロタw


678 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 15:44:13 ]
>>674
なんか勘違いしてない?
インスタンス化はアクセスされると自動的に行われるよ?

679 名前:672 mailto:sage [2008/02/05(火) 15:55:59 ]
>>678
勘違い、つか、VBが特殊な使い方ができるだけで、
インスタンスを作ってから使うのが基本だと俺は思ってるから、自然とそういう書き方になった。
複数のインスタンスが持てないわけでもなし、何故突っ込まれるのかが分からんが。


680 名前:672 mailto:sage [2008/02/05(火) 16:00:40 ]
>>678
あ、スマン、書き込んでから言いたい事が分かった・・・。確かに、勘違いしてるように見える。
申し訳ない。




681 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 16:04:15 ]
少なくとも、VBA/VB6では、規定のインスタンス(暗黙のインスタンス化)を使うのが、
まぁデフォですので・・・。

682 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 16:16:38 ]
Windows XP + Excel 2000SP3です。

MouseWheel Fixをアドインマネージャに起動時/ロードで設定すると、VBEを開こうとすると
「インストールの準備中」のダイアログが出て先に進みません。

ただ、なぜだかその状態で一度Excelを終了させてすぐに起動すると、そのダイアログが
終了してVBEが立ち上がるようになります。

「起動時/ロード」を設定せずに、Excel起動後にロードしようとしても、やはり最初の一回は
「インストールの準備中」から先に進みません。

何か、解決法はあるでしょうか?




683 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 16:40:58 ]
自作のDLLをDeclareで参照して使うと、Excelを終了させないとDLLがアンロードされないみたいなんですが、
強制的にDLLをアンロードするにはどうすればいいですか?

684 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 16:57:04 ]
>>683
日本語訳はヘンテコなんでこっちで。

PRB: Loading and Unloading DLLs in the Design Environment
ttp://support.microsoft.com/?scid=kb%3Ben-us%3B129514&x=14&y=13

685 名前:≠683 mailto:sage [2008/02/05(火) 17:17:18 ]
つまり、Declare宣言を編集しようと試みると強制的にアンロードされるってことでいいのかな?

686 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 17:36:25 ]
>>685
Declareの"r"を削除して行を離れると、強制コンパイルされてDLLがアンロードされるから、
その行に戻って"r"をタイプして元通りにしろってことね。

687 名前:デフォルトの名無しさん [2008/02/05(火) 23:14:50 ]
i = 3

Do While Cells(i, 1) = "東京"
If Range(i, 10) = 1 Then
Range("i" & Columns.Count).End(xlUp).Value = st4 & st5
st1 = Range(i, 8)
st2 = Range(i, 9)

With ws2.Range("A" & Rows.Count).End(xlUp)
.Offset(0.1) = st1
.Offset(0.2) = st2

End With

i = i + 1
Loop

恐れ入ります。
A列3行目から”東京”となっている間ずっと、
もしその行の10列目が”1”であるなら”1”の一つ右の行を確認、
空白だったらST4とST5の文字列を貼り付ける。空欄でなかったらさらに一つ右の行を確認・・・(ループ)
さらにST1、ST2の文字列を貼り付け・・・
というのをループさせたいのですが、

”1”の一つ右の行を確認、空白だったらST4とST5の文字列を貼り付ける。空欄でなかったらさらに一つ右の行を確認・・・(ループ)
の部分がよく分かりません。また、実行してみてもLOOPに対するDOが無いとのエラーになってしまいます。

おばかな質問で恐縮ですが、よろしくお願いします。



688 名前:デフォルトの名無しさん [2008/02/05(火) 23:33:09 ]
i=i+1の前に end ifがいる。

689 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 06:52:49 ]
>>682
そんな現象なったことないが、原因分かんないならVectorとかで同種のソフト拾ってきて使えば?
もしくはExcelを再インストールして様子見るとか

690 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 09:48:27 ]
>>682
他のアドイン機能はちゃんと動作するのか確認して、異常がないようなら
MouseWheel Fix を一旦登録解除(クラスライブラリ)してから、再登録してみたら?




691 名前:682 mailto:sage [2008/02/06(水) 10:50:25 ]
>>689,690
コメントありがとうございます。

他のアドインは正しく動きました。また、MouseWheel Fixをregsvr32 /uして再登録してみたんですが
状況が改善しませんでした。

いろいろと検索していると、同種のアドインが見つかりましたので、それを試してみたらうまく
動作しているようなので、とりあえずはこちらを使うことにします。

AddAutoScroll for VB6/VBE6
ttp://homepage1.nifty.com/mtj-k/software/addautoscroll_vb6.html

692 名前:デフォルトの名無しさん [2008/02/06(水) 11:30:49 ]
OS vista
excel 2007

Dim i As Integer
Dim x(10), y(10) As Single
For i = 1 To 10
x(i) = i
y(i) = i
Next
Cells(1, 1).Value = Application.WorksheetFunction.LinEst(y, x)

linest関数を使いたいのですが、試しに上記のようなプログラムを作成したところ
肝心のlinest関数のところで「linestプロパティが取得できません」とエラーがでます
基礎的な間違いをしてる気がするのですが、どうかアドバイスをお願いします


693 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 11:53:18 ]
  'テキストファイルを開きます。
  Workbooks.OpenText Filename:=strFileName, _
    Origin:=xlWindows, _
    StartRow:=2, _
    DataType:=xlDelimited, _
    TextQualifier:=xlNone, _
    ConsecutiveDelimiter:=False, _
    Tab:=False, Semicolon:=False, Space:=False, Other:=False, _
    Comma:=True, _
    FieldInfo:=Array( _
      Array(1, 2), Array(2, 1), Array(3, 2), Array(4, 2), Array(5, 2), _
      Array(6, 2), Array(7, 2), Array(8, 2), Array(9, 2), Array(10, 2), _
      Array(11, 2), Array(12, 2), Array(13, 2), Array(14, 1), Array(15, 1), _
      Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 2), Array(20, 2), _
      Array(21, 2), Array(22, 2), Array(23, 2), Array(24, 2), Array(25, 2), _
      Array(26, 1), Array(27, 2), Array(28, 2), Array(29, 2), Array(30, 2), _
      Array(31, 2), Array(32, 2), Array(33, 2), Array(34, 2), Array(35, 2), _
      Array(36, 2), Array(37, 2), Array(38, 2), Array(39, 2), Array(40, 2) _
    )


上記処理にてWinXP SP2 Office2003 SP3環境では問題なくシート表示するのですが、
WinXP SP2 OfficeXP (SP状態は不明です)の環境では文字化けして表示されます。
化けるフィールドとしては2バイト文字のところで、
テキストファイルとしては半角カナも全角漢字も混在のCSVで
改行コード、文字コードはCRLFのSjisです。

原因と対策がよくわからなくて困っております。
何かご存知でしたら教えていただければ、と思います。
よろしく頼みます。



694 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 12:28:21 ]
>>692
xの配列を渡さずに ~.LinEst(y) と書いたら動くから、パラメータの与え方が違うのかな?
スマンが使った事が無いので、識者を待つか、ヘルプを見れ。
ttp://office.microsoft.com/ja-jp/excel/HP100698381041.aspx?pid=CH100645381041


695 名前:692 [2008/02/07(木) 07:29:16 ]
すみません。
ただの宣言ミスでした。

Dim x(10) as single, y(10) As Single
としたら動きました。
>>694
どうもありがとうございます。
聞く時はもっと気を付けてからにしようと思います。


696 名前:デフォルトの名無しさん [2008/02/07(木) 12:10:10 ]

激しくスレ違いかもしれませんが、質問です。

PCゲームを多重起動しようと試みたのですがダメでした。
大抵のゲームはWindowsのアカウントを2つ作成し、別々のアカウントで起動すれば問題ありません。

現在、Vistaを使っているのでXPではどうなるかはわかりませんが(XPは右クリックから別ユーザーで起動が可能)、
Vistaでその手法をとる場合、runasコマンドを使用することになります。
しかしこのコマンドで別々に起動しても、後から起動したほうが無効になってしまいました。

で、ここからがわけわかめなのですが、同一のデスクトップからの起動はダメでも、
Windowメニュー→ユーザー切り替えをし、別々に起動すればうまくいきました。

この違いはいったいなんなのでしょうか?
 

697 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 13:28:40 ]
RMTでもやんのか?

どちらにしても激しくスレ違いだから帰れ。

698 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 13:43:46 ]
激しくスレ違いまで読んだ

699 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 10:06:37 ]
激しくまで読んだ

700 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:02:52 ]
sageがないので読んでない



701 名前:デフォルトの名無しさん [2008/02/09(土) 15:17:19 ]
Base64でファイル添付してメールを送りたいのですが、その方法があれば教えてください
CDO.Messageを使ってQuotedPrintableでの送信はできています

702 名前:デフォルトの名無しさん [2008/02/09(土) 15:29:15 ]
本文に追加すればいいことじゃないの

703 名前:デフォルトの名無しさん [2008/02/09(土) 15:36:00 ]
某エクセルスレで、以前に聞いたが全く回答の反応なしだったので、
ここでも、あまり、適切な話題ではないかもしれないが教えてくれ。
2002 + XP VBAマクロ、ドロップダウンリスト入力セル、関数式埋め込みセルが
あり、各ブックの大きさは700K〜2M程度の5つの同種類のブックを作ったのだが、
ブックによって、左下のステータスバーに(通常コマンドと表示されているところ)
が、セル移動で「再計算」が表示されるものと、「再計算」は表示されないものとの
2通りあるようになった。selection_changeイベント等求めている機能はいずれも
正常に動いている。

皆、コマンド、入力の表示のみで、再計算表示がされないようにしたいのだが、
どうしたらいいですか。


704 名前:701 mailto:sage [2008/02/09(土) 16:03:05 ]
>>702
Excelでソケット通信も含めて自作しろといってるようにしか聞こえないが

705 名前:デフォルトの名無しさん [2008/02/09(土) 16:32:41 ]
某エクセルスレで、以前に聞いたが全く回答の反応なしだったので、
ここでも、あまり、適切な話題ではないかもしれないが教えてくれ。
2002 + XP VBAマクロ、ドロップダウンリスト入力セル、関数式埋め込みセルが
あり、各ブックの大きさは700K〜2M程度の5つの同種類のブックを作ったのだが、
ブックによって、左下のステータスバーに(通常コマンドと表示されているところ)
が、セル移動で「再計算」が表示されるものと、「再計算」は表示されないものとの
2通りあるようになった。selection_changeイベント等求めている機能はいずれも
正常に動いている。

皆、コマンド、入力の表示のみで、再計算表示がされないようにしたいのだが、
どうしたらいいですか。


706 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 16:34:13 ]
>>704
最近のメーラは添付ファイルがアイコンなんかで表示されたりして隠蔽されて
いるけど,昔は送りたいバイナリをテキストにエンコードして文字通りメール
本文の下に貼り付けてましたよ。
↓こんなイメージ

-------ここから------------------------
encoded by なんちゃらかんちゃら
risdgfniefngoenogfaenogengopenoanongoneogneoagnoengea
fbwhibfiwbfiwbfiwbfiwbfibwibfiwbfiwbfiwbifbiwfbiwbfiw



707 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 03:48:29 ]
OS XP、Offce 2003
A1には半角英数字のみが入ってるとします。
このファイルには複数シートがあり、全シートにA1には違う文字列があります。
各A1の文字や文字数はシート毎にバラバラですが、半角英数字は変わりません。

質問としては、各シートのA1内に入っている半角大文字のみ
それぞれのシートB2に出力するのは可能?可能ならばヒントをお願いしたい
です。

708 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 08:19:57 ]
>>707
・セルA1内の文字列を取得する
・大文字があるか検索する
・文字列を組み立てる
・セルB2に設定する
・それらを全てのシートについて行なう

709 名前:デフォルトの名無しさん [2008/02/10(日) 15:33:57 ]
リテラルの中に、"(ダブルクォテーション)を含めるには、
どう書けば良いのでしょうか?



710 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 15:50:51 ]
””



711 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:07:26 ]
すいません。

A1からA4まで文章があります。

A2の横のセル(B2)にA4をカットペースト(A1A2A3は何もしない)をしたいのです。

For X = 1 TO 100 で
A 4*X+2の横のセル(B 4*X+2)にA 4*X+4をカットペースト
4*X+3 : 4*X+5 行を削除
Next i

というのをやりたいのですが、、初心者で分かりません。
特にセルのところをどうすればいいのか分かりません。教えてください。
どなたかお願いします。

712 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:11:50 ]
Cells(r, c).Value

713 名前:デフォルトの名無しさん [2008/02/10(日) 16:23:57 ]
>>704
補聴器買ったほうがいいと思うよw

714 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:36:38 ]
音は出てないから補聴器買ったところで聞こえようが無い

715 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:38:40 ]
>>713

>>704 には幻聴が聴こえるようだから精神科を薦めた方が良いのでは?

716 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:56:47 ]
そんなにいぢめてやらんでも・・・

717 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 17:02:23 ]
わかんねーから教習所に通ってんのに、お前らはなんにも教えてくれない自動車教習所の教官。
へたっぴな運転を見てからかってる。

718 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 18:29:04 ]
>>717
ウェ〜

719 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 18:47:18 ]
違うな、教習場に行けばいいのにこんな場末の練習場に来ている阿呆を見に来ている暇人だな。

720 名前:>711 mailto:sage [2008/02/10(日) 20:01:51 ]
やりたい事と合ってるかわ解らんが参考にしとくれ
行を削った後座標がズレるけど良いのか?

Sub TEST()
For I = 0 To 99
Cells(I + 4, 1).Cut Destination:=Cells(I + 2, 2)
Range(Rows(I + 3), Rows(I + 5)).Delete
Next I
End Sub



721 名前:デフォルトの名無しさん [2008/02/10(日) 21:12:35 ]
質問です。

例えば、Aの列にはデータを10〜20個入れたとして、
B1にデータ一個を入れます。
このとき、Cの列にはC1=A1-B1、C2=A2-B1・・・というように、
AのデータとB1の差を代入したいと思うのですが、簡単なやり方がわかりません。
確かコピペですいすいいけたと思うのですが・・・
ご教授お願いします。
使ってるのはXPsp1のexcel2002です。

722 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:28:24 ]
>>721
減算で。

Sub test001()
Range("A1").Resize(20).Copy Range("C1").Resize(20)
Range("B1").Copy
Range("C1").Resize(20).PasteSpecial Paste:=xlPasteAll, Operation:=xlSubtract, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub

723 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:29:34 ]
For i=startRow To endRow
Cells(i,3).Value=Cells(i,1).Value-Cells(1,2).Value
Next

つかVBAの質問なの???

724 名前:デフォルトの名無しさん [2008/02/10(日) 21:34:29 ]
>>721
C1に=A1-$B$1
C1の右下つかんで下方向にびろ〜んとする

725 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:54:21 ]
>>722>>723
すいません、理解できませんwww
>>724
ありがとうございます〜

726 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 22:09:59 ]
>>720
ありがとうございます。。
というか自分、何やってんだorz

727 名前:デフォルトの名無しさん [2008/02/11(月) 20:33:25 ]
プログラミングは詳しくないのですが、どなかたご助力下さい。
(質問内容)
フォルダ内で「読取パスワードが設定されいてるEXCELファイルを検索する」

どなかた該当の命令文をおしえていただけないでしょうか。

728 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 03:00:10 ]
DOS窓を表示させないまま、DOS窓のコマンド使って標準出力の内容が欲しい場合ってどうすればいいですか?
Execだとウィンドウ非表示にできないし、Runだと標準出力につなげないんですが

729 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 03:19:36 ]
>>728
FAQ

730 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 03:55:12 ]
ぐぐれ
コンソール プロセスを生成して標準ハンドルをリダイレクトする方法



731 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 04:04:03 ]
KB173085

732 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 07:47:07 ]
いまだにDOS窓とか使ってるやつおるんかねぇ

733 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 09:13:59 ]
>>732
GUIがないソフトがあるんで使ってる。

734 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 12:20:00 ]
DOS窓とコマンドプロンプトは別物

735 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 12:20:53 ]
と言うか、WinXPにDOS窓って存在するの?

736 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 12:53:06 ]
>>735
アレを、ほとんどの人はDOS窓と呼ぶのだ。

737 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 13:12:58 ]
二つのテキストファイルABを読み取り比較した結果を表示するマクロを作りたい。
Aに行が挿入されてBになっている場合、Aにも挿入した分だけ空白行を入れて表示したいが、いい例はないものか。

738 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 13:21:08 ]
つ[/usr/bin/diff]

739 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 13:25:56 ]
Excel VBAスレでその回答はどうだろう

740 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 13:33:00 ]
抽象的な質問には抽象的な回答を。



741 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 14:05:52 ]
W9x Wme の DOS 窓は文字通り DOS 窓って言って良いんだけど
コマンドプロンプトは DOS とは互換性がないからなぁ

742 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 14:08:38 ]
コマンドプロンプトってDOSのエミュレートじゃないの?
DOSプログラムは、コマンドプロンプトでは動かないの?

743 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 14:12:13 ]
DOSプログラムも動くからDOS窓でいいじゃん

744 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 14:12:41 ]
>>271
本尊乙

745 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:44:34 ]
質問です。
以下のが「スタック領域が不足しています」で通りません。
多分再帰が問題なんだろうけど、よくわかりません。
VistaのExcel2007です
If文以降に問題があると思うんですけど…

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Ein As Integer
Dim Fin As Integer
Dim Year As Integer
Dim Month As Integer

Year = Range("C2").Value
Month = Range("E2").Value

Ein = Weekday(Year & Month & "1", 1)

Cells(5, 1 + Ein) = ("1")

If Month = 2 Then
Fin = 28
Else
Fin = 31
End If

Cells(10, 10).Value = Fin
End Sub

746 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:50:08 ]
>>745
Application.EnableEvents = False
Cells(5, 1 + Ein) = ("1")

If Month = 2 Then
Fin = 28
Else
Fin = 31
End If

Cells(10, 10).Value = Fin
Application.EnableEvents = True


747 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 19:01:08 ]
>>746
ありがとうございますm(_ _)m
おかげさまで解決しました

748 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 19:04:58 ]
>>742
コマンドプロンプトは純粋なWin32プログラム。
仕様面でDOSの流れを大きく受け継いでいるけど。

コマンドプロンプトの中でDOSプログラムを動かすときには、
NTVDM (NT仮想DOSマシン)でDOS環境をこさえて、
その中でcommand.comを起動し、それから目的のプログラムを実行する。

それ以外だと直接NTVDMから始まるが後は同じ。

749 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 22:45:34 ]
コマンドプロンプトとDOS窓の区別が付いてないやつはVBAとマクロの区別も付いていない

間違いない

750 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:45:26 ]
>>727
無理せずテンポラリファイルにリダイレクトして読め



751 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:45:31 ]
んなもん、どーでもいい。

752 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:24:27 ]
>>738
それをEXCEL VBAでやりたい。
(UNIXでやれよ、というのは不可)

753 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:43:48 ]
>>752
行が挿入されたものか、一部改変されたものかの判断って、どうやるつもり?
判別の難しさと、それに伴う処理速度考えたら現実的じゃないと思うが。
前後データまで絡める判別はVBでは実用的じゃないし、ロジックの問題なら他スレ行け。


754 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 11:22:17 ]
>>752
私だったらピボットテーブル使う。
それぞれのテキストをA列に、B列にはどっちのテキストなのかわかる記号を入力しとく。後はわかるでしょ。

755 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 11:34:02 ]
diffのソース読めばいいよ

756 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 12:21:30 ]
アドバイス多謝。

>>753
>行が挿入されたものか、一部改変されたものかの判断って、どうやるつもり?

一部改変については、次の行を比較して、一致なら改変、そうじゃなければ挿入と考えるつもり。
(二行改変は考慮しない)

問題は、挿入か削除か。
そのセルを上方検索し、見つかれば削除、でなければ挿入って判断かな。

ロジックってこの板?

757 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 12:47:07 ]
他人を巻き込んでダラダラやらずに、diffのソース読んだほうが早いって

758 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 13:14:21 ]
shell c:\windows\windiff.exe

759 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 16:50:59 ]
つfc.exe

760 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 16:52:35 ]
"c:\program files\support tools\windiff.exe" /?



761 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:07:24 ]
良回答認定>>760

だがスレ違い

762 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 09:57:51 ]
>>758-760
神認定


と思って報告したら、
「入ってるPCと入ってないPCがある」と言われたorz

763 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 23:26:24 ]
winmerge

764 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:36:29 ]
cdiff.vbs

765 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:41:39 ]
2つのExcelファイルをdiffするのをVBAでやりたいのですが?

766 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:47:32 ]
やればぁ?

767 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:34:31 ]
やってくださいよ

768 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 17:25:09 ]
つc:\program files\support tools\bdiff.exe

769 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:52:16 ]
エクセルの機能にある、「Webページとして保存」ではなく

1.htmlを記述してあるシートをコピー
2.メモ帳に貼り付け、test.txtとして保存。
3.2のtest.txtをtext.htmlに名前を変更。

というような動作をVBAで自動化できるでしょうか。
もし、似たようなことが可能であれば教えてください。

770 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:58:33 ]
できるけどエクセルでやるようなこと?



771 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:05:58 ]
メモ帳を自動化するのはむずかしい

772 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:12:24 ]
セルの内容をそのままファイルに出力すればいいんじゃ?

773 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:16:09 ]
>>769
シートの内容をプレーンテキストに出力して拡張子を.htmlにしたいなら
メモ帳なんて使うまでもないが、770も言ってるとおりExcelの仕事じゃない
>>2★3,4

>>771
vbsとかで自動化するのは難しいけど
VBAというかVB言語ではSendMessage使えるから簡単だよ

774 名前:769 mailto:sage [2008/02/16(土) 19:51:14 ]
ありがとうございます。
具体的な目的を言うと、複数の条件でhtml記述を変化させている
シートがありまして、そのhtmlをブラウザでプレビューするのを
先ほどの手順でやっていたのですが、それを簡素ができないものか
と思っていたのです。
もう少し考えて見ます。


775 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:19:25 ]
>>772じゃ駄目な理由をまず聞こうか。

776 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:02:38 ]
簡単なSendMessageを使ってもらおうか

777 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 13:24:27 ]
教えてください!
Excel2007のOfficeボタンを非表示にする方法ってあるのでしょうか?
マイクロソフトのライブラリを見てもまだ情報がなくて……。どなたかご存知の方ご教授いただけませんでしょうか。

778 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:37:44 ]
Officeボタンとは何かというところから解説してください

779 名前:デフォルトの名無しさん [2008/02/17(日) 15:39:09 ]
OS:XP、Excel2000でワークシート関数を使用したいと思います。
引数にシート範囲ではなくVBAの配列を指定したいのですが
そのままでは出来ません。
引数に配列を指定する方法があれば、ご教授願います。

dim a(10) as long
dim b as long

b = WorksheetFunction.Max(a)

780 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:09:12 ]
>>778
「Officeボタン」とはExcel2007から追加された、いままでで言う「ファイル」メニューのようなGUIになります。
新しく追加されたGUIのため、Officeボタンのオブジェクトライブラリを操作すれば非表示にすれば良いのか、xmlを編集すれば操作できるのかどうしても判らないんです。
ご存知でしたらご教授戴けると幸いです。


>>779
動的配列のサマリを計算するメソッドのようなものがあればそれを代用すれば良いのかもしれませんが、
自分には以下のような方法でいつも計算させてしまっています。

Sub subTEST()
Dim a(10) As Long
Dim b As Long

For inCnt = LBound(a) To UBound(a)
b = WorksheetFunction.Max(a(inCnt))
Next a
End Sub






781 名前:デフォルトの名無しさん [2008/02/17(日) 19:13:16 ]
>>780
ご回答ありがとう御座います。
ただ、そのコードだとa(10)の値がbに入るだけではないでしょうか?

782 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 20:41:33 ]
>>780
なるほど
あいにく2003なので力にはなれません
でもApplicationクラスのどっかにCommandBarsみたいにあると思うから、
地道に探してみるしかないんじゃ

783 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 14:43:42 ]
zzって何者?
ヴァッカじゃねーのwww
氏ねよwww

チラシの裏でスマソ

784 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 15:39:11 ]
>>781
たまたま>780がmax()の仕様を知らなかっただけだろ。
どうしてもワークシート関数を使いたいなら配列を1要素ずつ処理すればいいと言う点では同意。
max()の場合なら、b = worksheetFunction.max(a(inCnt), b)とでもすれば使える。
# average()なんかはそうはいかないけど。

785 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 07:04:05 ]
関数の引数にセル位置を「A1」の形式で入れたいとき、
行を変数にはできないんでしょうか?
たとえば変数xをSUM関数につかう場合、=SUM(A1:Ax)としてもエラーになりますよね・・

786 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 08:08:49 ]
このすれ頭から読み直せ


787 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 11:53:43 ]
HYPERLINK関数で質問です。
HYPERLINK関数では、特定の文字を含むリンクは張れないのでしょうか?

現在、HYPERLINK関数を用いたシートの目次を、
マクロで作成しております。
ですが、シート名に記号を含むと参照できないようです。
(@や#などほとんどの記号は駄目ですが、
 アンダーバーだけは大丈夫なようです・・・。)

しかし、マクロではなく、編集メニューの
[挿入]→[ハイパーリンク]から同じシートを指定した場合は、
参照できるようですorz
これら2つの操作は全く別物なのかもしれませんが・・・orz

---------------------------------------------
<参照できる例>
=HYPERLINK("#シート名!A1", "シート名")

<参照できない例>
=HYPERLINK("#@シート名!A1", "@シート名")

Excelのバージョン:2002(10.2614.3311)
---------------------------------------------

参照できない例のようなシート名で、
HYPERLINK関数で参照する方法はありますでしょうか?

何かわかる方がおられましたら、ご助言ください。
よろしくお願いします。

788 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 12:29:39 ]
Officeボタンも知らないヤツが、質問スレで回答側に回ろうとするなよw

789 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:27:23 ]
目先の問題の回答は出来なくても質問の仕方を教えるのはできるだろ

790 名前:デフォルトの名無しさん [2008/02/21(木) 19:44:50 ]
エクセルで計算した数値は少数桁何桁精度なのでしょうか?



791 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 19:59:12 ]
3桁

792 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:11:40 ]
>>790
IEEE 754倍精度はある。

793 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:07:20 ]
Perlについての質問箱スレから誘導されて来ました。
Excel VBAからDOSコマンドを実行することはできますか?
具体的にはPerlスクリプトを実行させて、結果をExcelで受け取って
表示するまでを1クリックで行いたいと思っています。
環境はWindowsXP Home Edition、Excel 2003 です。
よろしくお願いします。

794 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:51:57 ]
>>793
>Excel VBAからDOSコマンドを実行することはできますか?
ちょいと命令忘れたができる。
VBAからPing送ったりbatを呼び出したりしたりもできるから間違いない。

>具体的にはPerlスクリプトを実行させて、結果をExcelで受け取って
>表示するまでを1クリックで行いたいと思っています。
上の内容を具体的にしたつもりだろうが、上ができたとしてもこちらは関係ないだろ?
PerlからExcelにイベントでも起こさせられれば可能。

795 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:06:30 ]
XPにDOSは載ってません

796 名前:793 mailto:sage [2008/02/22(金) 01:09:30 ]
>>794
ありがとうございます。では情報があることを信じて
再びgoogleの海へと漕ぎ出すことにします。
>上ができたとしてもこちらは関係ない
言われてみたらその通りでした。
いつPerlの処理が終わったかExcel側で知る必要がありますもんね。

>>795
すみません、XPではコマンドプロンプトでしたか。

797 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:46:04 ]
>>793
>>728-731

798 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 02:00:35 ]
active perlはどう?

799 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:22:22 ]
>>792
つまり何桁ですか?

800 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 20:07:05 ]
>>792
倍精度の前のIEEE 754って、何を規定した規格の番号ですか?



801 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 21:39:25 ]
>>800
ググれ
浮動小数点数の規格だ

802 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 23:55:17 ]
>>800
Excel2000辺りは倍精度だけど、2003辺りからは拡張倍精度になっているから要注意。
前者は10進数で概ね15桁、後者は10進数で概ね19桁の精度があることになる。

803 名前:693 mailto:sage [2008/02/23(土) 16:40:39 ]
解決したよ。

Origin句を定数xlWindowsから、
Shift-Jisのコードページである"932"へ変更してみたところ
文字化けなく開くことができたのでご報告。

その辺の細かな挙動の違いにだいぶ時間使いました・・・。
今後の何かの参考になれば、ということで、ひとつ。

804 名前:デフォルトの名無しさん [2008/02/23(土) 16:45:14 ]
VBAやEWCELのlog関数で計算して、その答えから逆算してもとに戻してみたら3桁精度しかなかったのです。
精度をあげる方法がありましたら教えてください。

805 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 18:30:23 ]
寡聞にしてEWCELなるものは存じ上げませんが、VBAでやってみたということでしたら
ソースをご提示願えませんでしょうか。

806 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 18:44:19 ]
EXCELの前身のアプリじゃね

807 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:11:53 ]
WinXP+Office 2k7です。
ワークシート上部のいくつかのセルに任意の数値を入力するとそれに基づいて全体が計算されるシートを作りました。
B8というセル(自分で数値を入力する)の値がいくつならセルI818が0になるか、というのを探すためにLoopを使ったのですが、

Dim x As Integer
x=0.1
Do
x=x+0.0001
Range("B8").Value=x
Loop Until Range("I818").Value=0

とやってもI818が0になっても普通に通り過ぎてしまいますorz
ひょっとしてワークシート上でI818が計算されるのを待たずにLoopが続いてしまうんでしょうか。。?
お知恵をお貸しください

808 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:23:28 ]
お前、小卒か?
整数って意味を知ってるか?

809 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:28:32 ]
あ、integerじゃなくてdoubleでした。
こっちに書くとき間違えた\(^o^)/

810 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:33:09 ]
> B8というセル(自分で数値を入力する)の値がいくつならセルI818が0になるか
自分でマクロ書かなくても、それはExcelのゴールシークを使えばいいのではないかと思う。



811 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:36:45 ]
>>810
うは・・・全然知りませんでした('A`)
お手数おかけしました。ありがとうございます

812 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:00:13 ]
すれ違いでしたら誘導お願いします。
「マクロを有効化する」を出さずfor文相当の機能を実現しようと思ってます。
直接forは使えないので、富豪的にセルのマスを記憶装置にする方針です。

やりたいことは、以下の状況で
「列Bが「新」の行の数値を抜き出して
それをコンマで連結して指定のセル(例えばD100)に入れる」です。
 列A 数値(1ずつ増えていく)
 列B 「新」「旧」のどちらかの文字

一旦、以下の式をC列に入れて、ドラッグでオートフィルします。
=if(B1="新",A1,"")
これはうまく行き、C列には「新規」の行のみに数値が表示されます。
次に、D列の先頭にC1の値を入れます(forの初期条件)
次に「同じ行のC列に値があれば、一つ上のD列の値をコンマで連結」
  「同じ行のC列に値がなければ、一つ上のD列の値をそのまま表示」
をforのステップ条件としてD2にかき、D100へオートフィルしようとしたのですが
=CStr(D1) & "," & CStr(C2)やCStr(val(D1)) & ..といった式ではうまくいきません。
アドバイス頂けないでしょうか

以上長文失礼しました。

813 名前:812 mailto:sage [2008/02/24(日) 11:03:55 ]
↑訂正「新規」ではなく「新」ですね

814 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:37:49 ]
Vlookupじゃね?

815 名前:デフォルトの名無しさん [2008/02/24(日) 12:12:23 ]
>>804

> VBAやEWCELのlog関数で計算して、その答えから逆算してもとに戻してみたら3桁精度しかなかったのです。
log関数は数値が小さいと精度は悪くなる。
少し値が変わると急激に値がかわるからな。    
自分で精度のよい関数を作るのがよい。
級数展開とかやれば作れる。

>>805-806
おまえら厨房だな。

816 名前:デフォルトの名無しさん [2008/02/24(日) 13:44:03 ]
質問なのですが適当な大きさのユーザーフォームを作成してフォームの中にラベルや
ボタンを設置します。設置したラベルやボタンが常にフォーム幅の真ん中に設置
させる方法はありますでしょうか?フォームの大きさを後で変更しても真中に自動で
なるようにしたいです。

817 名前:812 mailto:sage [2008/02/24(日) 15:25:46 ]
>>814
それだとコンマをくっつけることができませんでした。
しかし、結局、こんな感じで解決しました
if(C2<>"",concatenate(D1,",",text(C2,"#")),D1)


818 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:05:38 ]
>>816
算数レベルで処理


819 名前:800 mailto:sage [2008/02/24(日) 22:00:00 ]
>>802
Thanks。概ねという留保付けは、このせいですか?
Excel で浮動小数点演算の結果が正しくない場合がある 2007年3月19日
support.microsoft.com/kb/78113/ja

820 名前:デフォルトの名無しさん [2008/02/24(日) 22:38:32 ]
816さんどーゆうことですか?




821 名前:802 mailto:sage [2008/02/24(日) 22:49:22 ]
あーそうそう、そこの精度の欄にある、暗黙と仮数を足した53ビットを10進で表わすと概ね15桁ってこと。
つまり、log2(2^53)≒15.95=15~16桁。

822 名前:デフォルトの名無しさん [2008/02/25(月) 10:04:55 ]
教えていただきたいのですが、エクセルで、Aの列に任意のセルのカーソルが
ある場合のみ(B列やC列ではプログラム自体が稼動しなくしたいのですが)
FANCTIONを実行したいのですが、うまくいきません。
どうしたらうまくうごくのでしょか?


823 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 11:18:34 ]
>>822
もうちょっと分かるように説明しる。あと、どんなFUNCTIONよ?
ボタン押したときに、カーソルが特定の列にある場合にのみ処理を有効にしたいってことか?


824 名前:デフォルトの名無しさん [2008/02/25(月) 11:38:48 ]
822です。
>カーソルが特定の列にある場合にのみ処理
まさにこの事です。エクセルの行列のデーター
をVBで計算させてるのですが、キーの列をA列にして
そこからActiveCell.Offset(0, x)とActiveCell.Offset(0, x+1)
を足してActiveCell.Offset(0, x+2)へ答えを出しなさいとしてるのですが、
いかんせん、キーにしているA列以外にセルがある場合も実行していまうので
ActiveCell.Offset(0, x+2)の書き込みたいところデーターのあるActiveCell.Offset(0, x+3)
とかに上書きしていまうので、何とかしたいのです。FANCTIONは
ActiveCell.Offset(0, x+3)=ActiveCell.Offset(0, x)+ActiveCell.Offset(0, x+2)
を変数にしたものです。


825 名前:デフォルトの名無しさん [2008/02/25(月) 11:42:10 ]
すいません。間違いました。FANCTIONは
ActiveCell.Offset(0, x+2)=ActiveCell.Offset(0, x)+ActiveCell.Offset(0, x+1)
を変数にしたものです。
です。




826 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 12:17:05 ]
>>825
単にFANCTIONとやらの先頭で、ActiveCellがA列じゃなければ終わればいいだけじゃね?

827 名前:825 [2008/02/25(月) 12:58:53 ]
ActiveCellがA列じゃなければが、
書けないのです・・・


828 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 13:12:22 ]
そもそも>824のxはどこから出てきたのか知らんが、
offsetプロパティに辿り着けるくらいならcolumnプロパティくらい見つけられるだろ。
試しにmsgbox activecell.columnして味噌。


829 名前:825 [2008/02/25(月) 14:11:10 ]
If ActiveCell.Column = 1 Then で出来ました!
828さん ありがとうございます。
感謝 感謝!


830 名前:デフォルトの名無しさん [2008/02/25(月) 15:57:11 ]
基本的な質問でスミマセン!
ワークシートに新しい埋め込みグラフを作成(Addメソッドによる)したいのですが

Dim co As ChartObject
Set co = Worksheets("sheet1").ChartObjects.Add(50, 40, 200, 100)

は正常に動くんですが

Worksheets("sheet1").ChartObjects.Add(50, 40, 200, 100)

は、構文エラーになります。なんで?
わざわざ変数に格納しないと、機能しないのはなぜなのでしょうか?
詳しい人おられましたらご教授いただけないでしょうか?



831 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 16:00:26 ]
そういう構文だからだろ。疑問を持つところじゃない。

832 名前:デフォルトの名無しさん [2008/02/25(月) 17:16:37 ]
Rng AS Range
Rng1 AS Range
Rng2 AS Range

Rng=Range("A1:G10")

このRngから一番右の範囲をRng1に入れたい。
またRngから一番右の列を除いた範囲をRng2に入れたい。

どのようにすればよいでしょうか?

833 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:32:27 ]
union

834 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:45:36 ]
>>830
Callステートメント

835 名前:デフォルトの名無しさん [2008/02/25(月) 18:49:27 ]
>>832

Rng1=Rng.Resize(Rng.Row.Count-1,Rng.Columns.Count).offset(1,0)
Rng2=Rng.Resize(1,Rng.Columns.Count).offset(1,0)

836 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:51:26 ]
>>830
Worksheets("sheet1").ChartObjects.Add 50, 40, 200, 100

837 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:07:06 ]
ところで君たちは未だにVB独特のハンガリアン記法を守っているのかい?
今度VBAをメンテすることになって読みにくいなあと思ってるんだが・・・。


838 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:21:31 ]
なんでExcelでシステムハンガリアン使うん?

839 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:40:24 ]
>>835
はぁ?

>>832
Set Rng1 = Rng.Columns(Rng.Columns.Count)
Set Rng2 = Rng.Resize(, Rng.Columns.Count - 1)

840 名前:デフォルトの名無しさん [2008/02/25(月) 23:55:21 ]
質問です、デスクトップでユーザーフォームだけ残してエクセルは最小化する方法はありますでしょうか?



841 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:00:18 ]
任意のxisファイルを2個各シートに読み込みたいのですが
どうやってもできません・・・
ファイルの読み込みってどうやればいいのでしょうか?

842 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:17:49 ]
>>841
ブックを開いておいて、シートを移動すれば医院で内科医。

843 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:27:13 ]
vbaを使用してRS232cで計測するはめになったんですが、エクセルのvbaはvb6のようなタイマがないので、
擬似的なタイマを作成するときに、何か注意点とか欠点教えてください

844 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:28:18 ]
ご愁傷様。

845 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:30:47 ]
>>842
VBAでボタンでファイルを選択って出したいのです!
でも参照とか選択ってBOXの出し方すら分かりません・・・

846 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:56:58 ]
>>845
ファイルを開くダイアログ
ttp://www.serpress.co.jp/excel/vba030.html

847 名前:デフォルトの名無しさん [2008/02/26(火) 01:14:15 ]
質問です、デスクトップでユーザーフォームだけ残してエクセルは最小化する方法はありますでしょうか?

848 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:15:58 ]
>>846
おお、これでBOX造れるんですね!どうも!
またちょっと頑張ってみます

849 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 07:10:38 ]
>>847

こういう事?

Private Sub UserForm_Initialize()

Application.Visible = False
UserForm1.Show

End Sub

850 名前:デフォルトの名無しさん [2008/02/26(火) 08:29:10 ]
Dim a As Integer
a = Count("a1:a4")
For i = 1 To a
Beep
Next i

シートのデーター数だけ繰り返し処理したいのですが
a = Count("a1:a4")ここんとこがエラーになってしまいます。
どう処理したらいいのでしょう?






851 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 12:43:24 ]
a = WorksheetFunction.Count(Range("a1:a4"))
でどう?
試してないけど。

852 名前:デフォルトの名無しさん [2008/02/26(火) 16:50:49 ]
851さん 850です。動きましたありがとうございました。


853 名前:デフォルトの名無しさん [2008/02/26(火) 19:00:35 ]
Renge(RefEdit1.Value)と使いたいのですが
RefEdit1.Valueを『セル範囲』かどうか調べる方法はありますでしょうか?
よろしくお願いします。

854 名前:デフォルトの名無しさん [2008/02/26(火) 20:10:29 ]
フォームから入力するVBAを作成しました。
プログラムを走らせ、フォームがでますが、
何も入力せずに放置するとFrame内だけが白くなります。
改善する方法はありますでしょうか?

855 名前:デフォルトの名無しさん [2008/02/26(火) 21:57:03 ]
830です。
>>834 さん
なるほど!。値を渡す構文になってしまっていたのですね!
>>836 さん
本当だ!動きました。ありがとうございました。
834さん。836さん。お陰様で疑問が解決しました。感謝!感謝!


856 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:29:04 ]
>>854
気にすると体に毒だぞ

857 名前:デフォルトの名無しさん [2008/02/27(水) 09:51:07 ]
>>856
つまり対策はないと?

858 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:52:18 ]
モニタの色温度を変えると白を赤っぽく変えたりできるよ

859 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 18:33:00 ]
>>857
俺ら低レベルではわからないんだよ。

860 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:33:21 ]
>>854
再現する最低限の構成で、ブックもしくはユーザーフォームモジュールをうp
情報全く無しじゃ、さすがに改善法どころか改善可能か否かすらもわからんわな



861 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:22:06 ]
俺らはそれだけVBAをさわってないってことさ。


862 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:26:29 ]
現実の出来事かどうかすらあやしい

863 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 05:23:21 ]
他のフォームでも同じ現象になるのか検証したの?

864 名前:デフォルトの名無しさん [2008/03/01(土) 04:27:20 ]
エクセルで作った表を画像として保存するマクロってありますかねぇ?

865 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 04:55:31 ]
>>864
VBAの範囲だけじゃ無理だけど実現可能

866 名前:入院中の側近 ◆0351148456 [2008/03/01(土) 08:15:23 ]
>>864
(っ´▽`)っ
暇なので作ってみたよ☆

Option Explicit

Private Declare Function GetVersionExA Lib "KERNEL32.DLL" ( _
  ByRef pVersionInfo As OSVERSIONINFO _
) As Integer
Private Declare Sub keybd_event Lib "USER32.DLL" ( _
  ByVal bVk As Long, _
  ByVal bScan As Long, _
  ByVal dwFlags As Long, _
  ByVal dwExtraInfo As Long _
)
Private Const VK_SNAPSHOT As Long = &H2C
Private Const VK_MENU As Long = &H12
Private Const KEYEVENTF_KEYUP As Long = &H2

Private Type OSVERSIONINFO
  dwOSVersionInfoSize As Long
  dwMajorVersion As Long
  dwMinorVersion As Long
  dwBuildNumber As Long
  dwPlatformId As Long
  szCSDVersion As String * 128
End Type

(次レスに続く)

867 名前:入院中の側近 ◆0351148456 [2008/03/01(土) 08:16:12 ]
(>>866の続き)

Public Sub printScreen()
  Dim pVersionInfo As OSVERSIONINFO
  pVersionInfo.dwOSVersionInfoSize = Len(pVersionInfo)
  If pVersionInfo.dwMajorVersion >= 5 Then
    Call keybd_event(VK_SNAPSHOT, 1, 0, 0)
  Else
    Call keybd_event(VK_MENU, 0, 0, 0)
    Call keybd_event(VK_SNAPSHOT, 0, 0, 0)
    Call keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0)
    Call keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0)
  End If
End Sub

868 名前:入院中の側近 ◆0351148456 [2008/03/01(土) 08:36:24 ]
(っ´▽`)っ
>>866-867はPrintScreenするマクロだよ。
あとは任せた☆(っ´▽`)ノシ

869 名前:デフォルトの名無しさん [2008/03/01(土) 08:41:50 ]
割り込みで申し訳ないですが、パラレルポート制御を
考えているんですが、VBIOSCMみたいなDLLってVista対応版は
ありますか?
その他でパラレル制御の方法はありますか?
是非ご教授願います。

870 名前:デフォルトの名無しさん [2008/03/01(土) 10:07:39 ]
PC内のフォルダおよびファイルを全て
エクセルシートに書き出したい。
DIR関数でやってみたけど、
フォルダを見つけたら階層を掘って、掘り尽くしたら戻って…
て処理が上手く行かない。
ご協力頼んます



871 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 10:10:05 ]
(っ´▽`)っ はプロかな?凄いな

872 名前:入院中の側近 ◆0351148456 [2008/03/01(土) 10:21:41 ]
>>870
(っ´▽`)っ
ヒント:再帰

873 名前:入院中の側近 ◆0351148456 [2008/03/01(土) 10:28:33 ]
>>870
(っ´▽`)っ
こういう関数を作る。

引数:フォルダ
処理
・引数のフォルダの情報をワークシートに書き出す。
・フォルダ内の全てのファイルの情報をワークシートに書き出す。
・フォルダ内の全てのサブフォルダに対し、それを引数として当関数を呼び出す。

(っ´▽`)っ
ちなみにエラーをキャッチしておかないと、
参照不可のフォルダ、ファイルのところで処理が止まるよ。

ファイル、フォルダに関してはScripting.FileSystemObjectを使うといい。

874 名前:870 mailto:sage [2008/03/01(土) 11:16:18 ]
>(っ´▽`)っ
ありがとう。やってみます。

875 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 13:25:08 ]
なんだ、ファイルを全て書き出したいと言うから中身を書き出したいのかと思ったぜ。
単にファイル名を書き出したいだけなんだな。

876 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:36:05 ]
FSOに慣れておくとASPにもVBSにも使えるからオトクです(^ω^)

877 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:32:26 ]
>>870
ttp://www.atmarkit.co.jp/fwin2k/win2ktips/310filelist/filelist.html

878 名前:デフォルトの名無しさん [2008/03/02(日) 23:54:52 ]
物凄く基本的な事で申し訳ないのですが・・・、処理待ちでスリープを掛けたく、
 WScript.sleep (250)
と記述していますが、エラー424 オブジェクトが必要です というエラーが出るのです。

何か参照設定が足りないんでしょうか。。

879 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 23:56:42 ]
ググれよ・・・

880 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:01:10 ]
>>878
WScript.exeを参照設定しろー



881 名前:デフォルトの名無しさん [2008/03/03(月) 00:45:53 ]
>>880
ありがとうございます。
WScript.exeを参照し、Windows Script Host(Ver5.6)を参照設定に加えたのですが
やはり同じエラー出ました。
参照の問題では無さそうなので、設定も含めた他の部分をもう一度見直して見ます。

>>879
当然質問前に検索したのですが、WScriptの参照設定について記述されたページが見つからなかったもので・・・。
すみませんでした。


882 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 01:15:50 ]
Win32 APIのSleep関数を使えばいいじゃない。

883 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 01:22:50 ]
>>878
それって、Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)じゃいけないの?

884 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 10:54:00 ]
自分が過去に作ったソースをよく探すんですけど、
Excelファイルが散在してるし、開いてからAlt+F11を押す手間とか効率悪いです。
GoogleDesktopSearch用Excel VBAプラグインってないもんですかね?

885 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:52:08 ]
別にプラグインじゃなくてもブックファイルからVBAを抽出するだけでもよさそうな。
まぁ、そういうものがあるかどうかって話になるけど。

886 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:59:12 ]
>>885
VBAのコードは、マクロでファイルにexportできるから、作ろうと思えば比較的簡単に作れる。
ただし、そのexportしたものがGDSでIndexingされるかどうかは、別の話。

887 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 13:43:25 ]
こう? officetanaka.net/excel/vba/vbe/index.htm
保存するとき拡張子に.txtを追加してあげればいいよね。
とりあえず何とかなりそうな気がする。どもども。

888 名前:できたよん mailto:sage [2008/03/03(月) 18:53:27 ]
VBAソースをいっぺんに吐き出すマクロ(Excel2003)
準備
・A列にファイルリストを作る
 参考:ttp://www.vbalab.net/vbaqa/data/excel/log/tree_199.htm
・ツール→マクロ→セキュリティ→信頼できる発行元
 のVBプロジェクトへのアクセスを信頼するをON

ext(1) = ".bas": ext(2) = ".cls": ext(3) = ".frm"
Set xl = CreateObject("Excel.application")
xl.Application.Visible = True
xl.AutomationSecurity = msoAutomationSecurityForceDisable 'マクロ無効
For i = 1 To 9999
 bookName = Cell(i, 1)
 If bookName = "" Then Exit For
 Set bk = xl.Workbooks.Open(bookName, False, True)
 With bk.VBProject.VBComponents
  For j = 1 To .Count
   If .Item(j).Type <= 3 Then _
    .Item(j).Export bookName & "_" & .Item(j).Name & ext(.Item(j).Type) & ".txt"
  Next
 End With
 bk.Close SaveChanges:=False
Next

889 名前:デフォルトの名無しさん [2008/03/04(火) 12:34:14 ]
すいません。KILLの使い方が分かりません。
たとえば、BOOK1のファイルごと、削除したいのですが
どうゆうコードで書いたらいいのですか?
 

890 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 12:41:43 ]
killはファイルを消すときに使う



891 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:15:20 ]
kill "your.xls"

892 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 16:57:42 ]
Kill "BOOK1.*"

893 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 11:30:59 ]
質問させてください。

.value = "hogeの値は" + hoge + "です"

の表記をしたいのですが、""テキストと、変数を並べて表記する方法が分かりません。
+で結合ではありませんでした。
VBAでのテキストと変数の表記方法を教えてくださいませ。

894 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 12:00:21 ]
>>893
VBの文字列結合は &

895 名前:デフォルトの名無しさん [2008/03/05(水) 12:44:58 ]
Private Sub CommandButton1_Click()
Kill "BOOK1.*"
End Sub
book1のファイルのコマンドボタンでこれを実行すると、ファイルが
みつからないとエラーだでてしまうのですが・・・
ファイルをかっこよく消したいです。

896 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:14:45 ]
>みつからないとエラーだでてしまうのですが・・・
かっこわりw

もしかして、ワイルドカードが使えないんじゃないの?

897 名前:デフォルトの名無しさん [2008/03/05(水) 13:17:44 ]
*←これでしょ?
でも使えないの・・・


898 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 14:18:02 ]
* これを見るだけでなんか恥ずかしくなってしまうよな

899 名前:デフォルトの名無しさん [2008/03/05(水) 14:42:21 ]
違うの?

900 名前:デフォルトの名無しさん [2008/03/05(水) 15:30:35 ]
すいません、ExecuteExcel4Macroで、ループを使わずに
一気に範囲データを読み込むことは出来ないのでしょうか?



901 名前:デフォルトの名無しさん [2008/03/05(水) 17:00:06 ]
Dim d(100,100)AS Douale3Dim rng AS Range
rng=Range("A1:C3")
このrngから配列dに行列を入れ替えて代入する方法がわかりません。
どのようにすればよいでしょうか?

902 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:06:38 ]
Excel VBAとかマジわかんないけど
If ActiveCell.Column <> 1 Then
Exit Function
End If
じゃだめなの?

903 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:29:47 ]
>>901
訂正します。

Dim d(100,100)AS Double
Dim rng AS Range
rng=Range("A1:C3")

d=(double)Transport(rng)

このrngから配列dに行列を入れ替えて代入する方法がわかりません。
どのようにすればよいでしょうか?

904 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 20:34:08 ]
>>900
おれも尻鯛

905 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:17:08 ]
>>900
まずはどうしてもループが使えない事情があるなら説明してみろ
単に使いたくないとか時間が掛かるとかなら帰れ

906 名前:900 mailto:sage [2008/03/05(水) 21:19:31 ]
>>905
お前に言う必要は無い。
わからないならレス不要

907 名前:900 mailto:sage [2008/03/05(水) 21:38:46 ]
自己解決しました。
お前らマジ役立たず

908 名前:900 [2008/03/05(水) 21:39:40 ]
なんだか偽者出てるみたいですが、900です。

>>905
ループで一度データをコピーするプログラムを作成したのですが、
開始から終了までかなり時間がかかってしまうことが分かりました。
処理時間を軽減できないかと考えて、範囲ごとコピーできないかと考えた
のが理由です。


909 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:43:04 ]
縦横変換したものを一旦シートに貼り付けて、それから変数に代入しろ

910 名前:デフォルトの名無しさん [2008/03/06(木) 02:28:41 ]
>>900
速度向上のためにはSelectするな!withを使え!
Rangeで取り込んで配列に一括取り込み。




911 名前:デフォルトの名無しさん [2008/03/06(木) 02:32:43 ]
>>903
まず型変換して代入で可能
d=CDbl(rng)

あと行列逆転はFor〜Nextで1セル毎にループでできるが、一括でできる方法はないかな?



912 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 08:45:45 ]
速度気にするなら、まずExecuteExcel4Macroでやろうってのが間違いだと気付け

913 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 09:06:42 ]
>>908
ExecuteExcel4Macroなんか使って読みにくく、また他に使い途もないコードを書くより、
ADO使って"SELECT * FROM [Sheet1$]"みたいにやった方が、将来的に考えて
色々と応用できて幸せになれる確率が高いぞ


914 名前:900 mailto:sage [2008/03/06(木) 09:50:11 ]
御回答ありがとうございます。
ExdcuteExcel4Macroは使わない方針でいってみたいと思います。

915 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 09:59:52 ]
>>911
>>909

916 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 10:11:06 ]
Publicで宣言したプロシージャを
ツール→マクロ→マクロとメニュー選択した際のダイヤログボックスに
表示させない方法があったと思うのですが、
どうやればいいでしょう????

917 名前:初心者 [2008/03/06(木) 11:40:13 ]
初歩的な質問かと思いますが、可能な限り過去の書き込みを検索しましたが、解決できませんでしたので、質問させていただきます。

A1からA10に数値の値が入っているとします。
もしこのA1からA10までの値がすべて0だったら、○○というプログラムを実行する、というマクロを組みたいと思っています。

If Worksheets("Sheet1").Range("A1:A10") = 0 Then
Call ○○
End If

というふうに自分では作ってみたものの、うまくいきません。
アドバイスの方よろしくお願いします。


918 名前:デフォルトの名無しさん [2008/03/06(木) 15:42:25 ]
>>915
シート作成は速度の関係上できるかぎり避けたいのです。
関数やプロパティで行列を逆に入れ替える方法はないでしょうか?

919 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:47:34 ]
>>918
計測してから物を言え。

920 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:12:20 ]
>>917
dim i as integer
for i = 0 to 9
if worksheets("sheet1").range("a1")..text <> "0" then exit for
next
if i == 10 then
call ***
end if



921 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:13:18 ]
あ、思いっきり間違ってた。
if worksheets("sheet1").range("a1")..offset(i,0).text <> "0" then exit for
が正解。

922 名前:デフォルトの名無しさん [2008/03/06(木) 16:47:13 ]
>>919
シート作成するのが通常よく使うよね。
VBAではあまり速度を問われないことがおおいから。
私もそうですし他の方法しか教えられない。

>>918
気長にVBAスペシャリストを待ちましょう。


923 名前:919 mailto:sage [2008/03/06(木) 16:53:13 ]
スペシャリストの俺に喧嘩売ってんのか?

924 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:02:20 ]
取りうる方法は三つしかない。
・行列を変換しながら1セルごと配列にコピー
・rangeを配列にまるごとコピーした後に、行列を変換しながら別の配列に代入
・行列を変換して別のシート(同じシートでもいいが)にコピーしてから、rangeを配列にコピー

実行する内容や量やExcelのバージョンやPCのスペックによって変わるから、
自分で測って一番速い奴を使え。

925 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:24:23 ]
んなこたーない。

dim rng as range
dim d as variant
set rng = worksheets("sheet1").range("a1:c3")
d = application.worksheetfunction.transpose(rng)


926 名前:デフォルトの名無しさん [2008/03/06(木) 18:43:57 ]
教えて先生!!
あたしシートの追加をしたいのぉ

Sub Macro1()
Dim unko As String
unko = "ウンコ"
Sheets.Add ?????
End Sub

変数名を取得して、その変数名をシート名としたシートを追加したいというかぁ
リネームじゃなくて、ダイレクトに追加できればいいなぁとおもうの。
エロイ人おしえてーー。

927 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:07:32 ]
>>901
dがVariant型でよければ、
d = WorksheetFunction.Transpose(Range("A1:C3"))
でdには縦横入れ替えた2次元配列が格納される。

928 名前:927 mailto:sage [2008/03/06(木) 20:10:40 ]
よく見たら>>925でがいしゅつじゃねーか。


929 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:38:03 ]
>>916
そういう時は、dummyで使わない引数をプロシジャの()の中にセットする様にしているけど邪道か?


930 名前:デフォルトの名無しさん [2008/03/06(木) 21:14:07 ]
>>925

dim rng as range
dim tmp as variant
dim d as double
set rng = worksheets("sheet1").range("a1:c3")
tmp = application.worksheetfunction.transpose(rng)

最後に
forループで
tmp(i,j)からCDbl(d(i,j))に代入しました。
かなり速度が改善しました。
ありがとうございました。



931 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:15:09 ]
クラスを書く習慣を付ける

932 名前:916 mailto:sage [2008/03/06(木) 22:26:58 ]
>>929
問題なしです!ありがとうございました!

933 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:06:52 ]
>>895
book1を開きながらbook1ファイルは削除できまい。
あと、book1は何処に保存してあるのか。

934 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:08:32 ]
>>931
誰に言ってるの?
必要ならつけりゃいいが、必要ない場合もある。
たとえばシートモジュールでMe.なんてウザイだけ。

935 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:24:40 ]
>>934
何だよヴォケ!
クラスを明示するの当たり前だろ?
>>925みたいなコードもブックから明示してないからまだまだだね。
ブックの上のApplicationも明示しないとね。


936 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 03:21:54 ]
相手の欠点はよくみえるが自分の欠点はみえないんだよ。
こどもじゃあるまいし、書いてることをそのまま実行したりはしないよ。
ヒントがわかれば十分。

937 名前:926 mailto:sage [2008/03/07(金) 05:40:25 ]
うぅ・・・分かる方、いらっしゃいましたらhelpです・・・><

もしくは、追加→リネーム の方法がベストなのでしょうか。
bookを開いてから、何枚のシートを追加したかの監査変数を使う事が避けられれば理想なのですが・・。

皆さんどのようにしているのかも興味があります。
何卒よろしくお願いします。
お礼にこれあげます。>+(

938 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 07:08:02 ]
>>937
sheets.Add().name="ウンコ"

939 名前:938 mailto:sage [2008/03/07(金) 07:12:38 ]
>>937
試してみたら()も省略できた

sheets.Add.name="ウンコ"

940 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 08:30:45 ]
>>937
一応マジレスしておくと、質問するならふざけるな。
ふざけないで質問してたらきっと即レスついたはずだ。



941 名前:895 [2008/03/07(金) 09:04:48 ]
933さんありがとうございます。
>あと、book1は何処に保存してあるのか。
これは、C:\Documents and Settings\xxx
と指定すればいいのでしょうか?


942 名前:895 [2008/03/07(金) 09:17:12 ]
それと、例えば、エクセルのファイルネーム”あ”.xlsのファイルにパスワード
を設けて(例えばパスワードは10)他の人に勝手に開かれないようにしてるのですが
人のPCのデータを除き見るやから達からデータを守る為、パスワードの入力を
例えば3回失敗したらファイルごと、どこのディレクトリに合っても強制削除したいのですが
どうコードを書いたらいいのでしょか?


943 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 10:34:01 ]
自分自身のマクロでそれをするのは無理。


944 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:05:26 ]
>>935
おろ?
君は>>925>>931じゃなかったの?
似たようなこといつも言ってるMougの馬鹿を一人知ってるんだが。
ってか彼はうるさい割にはいつもシートからしか明示しないがね。

945 名前:925 mailto:sage [2008/03/07(金) 11:16:26 ]
なんだか知らんけど、俺を巻き込まないでくれ・・・

946 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:19:45 ]
質問です。私の持っているVBA本に
「同一モジュール内に同名の行ラベルを設置できない」
って書いてあったので、検証しようと思い以下のサンプルコードでテストしました。

'  プロシージャ「p1」
Public Sub p1()
 On Error GoTo ErrHandler

 Err.Raise 10
 Exit Sub
ErrHandler:
 Debug.Print "エラー発生@"
End Sub

'  プロシージャ「p2」
Public Sub p2()
 On Error GoTo ErrHandler

 Err.Raise 10
 Exit Sub
ErrHandler:
 Debug.Print "エラー発生A"
End Sub

同一モジュール内にプロシージャ「p1」も「p2」も「ErrHandler:」という行ラベルを設置していますが、
それぞれの「On Error GoTo」はきちんとプロシージャ内の「ErrHandler」へ処理しています。

これってどういう事なんでしょう?
私の持ってるVBA本が間違っているのでしょうか???



947 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:46:18 ]
>>946
はい、その通り間違っているので、書名を公開してみんなが不幸せになるのを防ぎましょう。

948 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 20:56:10 ]
マクロの中で自分のファイル名(フルパスで)を取得するにはどうすればよいですか?

949 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:02:21 ]
thisworkbook.pathとname

950 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:29:13 ]
>>942

Sub hoge()
  Dim a As String
  Dim w As Object
  Dim v As Object
  a = ThisWorkbook.Path & "\" & ThisWorkbook.Name
  Set w = CreateObject("WScript.Shell")
  Set v = w.exec("cmd.exe /c del """ & a)
  Application.Quit
'  Do Until v.stdout.atendofstream
'    MsgBox (v.stdout.readline)
'  Loop
End Sub




951 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 22:47:43 ]
>>950
それ、マクロ無効にすると開けちゃうから。

952 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 23:48:02 ]
「クラスを書く習慣をつける」って書いたの俺なんだけどさ(>>935じゃない)
別件(Public云々)にレス付けたつもりだったんだが、曲解した挙げ句に意味不明な粘着を発揮してるキチガイが居るな
なんだよ「Mougにホゲホゲ」ってよ
見えない敵が見えてる系のキチガイの考えることはマジで分からんw

> 934 名前: デフォルトの名無しさん [sage] 投稿日: 2008/03/07(金) 00:08:32
> >>931
> 誰に言ってるの?
> 必要ならつけりゃいいが、必要ない場合もある。
> たとえばシートモジュールでMe.なんてウザイだけ。

> 944 名前: デフォルトの名無しさん [sage] 投稿日: 2008/03/07(金) 11:05:26
> >>935
> おろ?
> 君は>>925>>931じゃなかったの?
> 似たようなこといつも言ってるMougの馬鹿を一人知ってるんだが。
> ってか彼はうるさい割にはいつもシートからしか明示しないがね。

953 名前:デフォルトの名無しさん [2008/03/08(土) 00:04:09 ]
Excel2003
XP SP2

ブックを非表示にして、フォームをタスクトレイに常駐させてタイマー処理は実装可能でしょうか?

教えてエロい人

954 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 04:24:55 ]
YES

955 名前:944 mailto:sage [2008/03/08(土) 04:39:19 ]
>>952
とぼけても無駄無駄w
お前はMougでも感じ悪いけどこっちでも感じ悪いな。

956 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 05:04:10 ]
NO

957 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 08:28:43 ]
とぼけてるのがいるなw

958 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 12:35:40 ]
見えない敵と戦う聖戦士がム板にも湧いてきて、粘着してくるとは思わなんだわ
悪いことは言わないからMougとやらで聖戦に興じてろや
釣りにしてもキモすぎるし、真性だとしても治療に付き合う義務はない

959 名前:デフォルトの名無しさん [2008/03/08(土) 15:06:06 ]
アクティブじゃないシートの選択しているセルの値ってとれないでしょうか?
シート名が特定できれば、一旦アクティブにして値をとって戻るとか出来るのですが
いろいろなシート(名)を対象に出来るようにと思っています
よろしくお願いいたします


960 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 16:48:31 ]
>>958
いらんおせっかい書くからだよ。
つまらん自説を述べるから粘着される。



961 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:07:05 ]
VBEで挿入できるものに、ユーザーフォーム、標準モジュール、クラスモジュールの3つがあるけど、
クラスモジュールだけ使ったことがない。これってどういう時に使うもんなんです?

Excel2002ですけど。

962 名前:デフォルトの名無しさん [2008/03/08(土) 23:37:13 ]
そのまんまクラスを書くモジュール
VBAだと継承ができないんで、独自イベントを実装したいときとか、
構造体代わりに使うとか、コントロール配列を実現させたいときに
使うぐらいしかないけどね(^ω^;)

963 名前:961 mailto:sage [2008/03/09(日) 08:10:28 ]
んんん、、、判らん w スマソ まだ俺のレベルでは必要ないって事すかね www

964 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 10:25:51 ]
ExcelVBAごときにクラスなんかいらん

965 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 10:39:07 ]
strategy patternを使いたいときとか

966 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 15:28:15 ]
コントロール配列を実現させたいとき=継承
だったと思うから

「継承代わりに使いたいときだけ」
しか使わん

967 名前:デフォルトの名無しさん [2008/03/09(日) 18:58:31 ]
CSVの書き出しに関して、教えてください。

EXCELデータを、カンマ区切りの改行コードつきCSV形式で書き出したいのです。
↓このような感じ
項目1,項目2,項目3,改行コード(vbcrlf)項目1,項目2,項目3・・・
print # でコード記述

データの最後は改行コード(vbcrlf)で終了しなくてはいけないのですが、
そうすると当然のことですが、最後に余分な空白行ができてしまいます。

改行コードで終了するが、最後の空白行はなくす、ということは可能なのでしょうか?

「もう。無理です・・・」と泣きを入れてみたのですが、なんとかしろ、
とのお達しがあり、もし、良い方法があれば伝授いただければ助かります!!

宜しくお願いします。


968 名前:エスパー君登場 mailto:sage [2008/03/09(日) 19:20:08 ]
最後に余分な空白行が出来ているというのは気のせい。

969 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:26:29 ]
「余分な空白行」というのは、CRLFCRLFのことだが、もしファイル末尾がそうなっているとしたら、
それはコードのバグ。
ファイルの末尾がCRLFで終わっているなら、余分な空白行など存在しない。

970 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:58:51 ]
ぐぐれ 最後の改行 vb



971 名前:デフォルトの名無しさん [2008/03/09(日) 20:08:08 ]
ありがとうございます
「EXCEL VBA 改行コード」で検索していたのですが、
良い方法を見つけることが出来ず、悩んでいました。
頑張って挑戦してみます


972 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 20:55:39 ]
最後の改行と余分な空白行というのは違う意味だと思う

973 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:06:19 ]
>>971
ちょっと待て。何をどう挑戦するつもりなんだ?

974 名前:側近中の側近 ◆0351148456 [2008/03/09(日) 21:56:06 ]
(っ´▽`)っ
EOF直前の改行は本来必要なものと考えるが。
たまにEOF直前の改行がないテキストファイルを見るが、あれはどうなの?
ちなみにviだとエラーメッセージが出るぞ。

975 名前:側近中の側近 ◆0351148456 [2008/03/09(日) 22:01:32 ]
(っ´▽`)っ??? >>967のいう「余分な空白行」ってこういうことだよね?

"aaa\r\nbbb\r\nccc\r\n"(\r\nは改行コード)
これを
"aaa\r\nbbb\r\nccc"
にしたいってことでしょ?多分。
「『なんとかしろ、』とのお達しがあり」
ってあるけど、その「なんとかする」理由は何だろうね?
何もないのに言ってるなら、その人にもうちょっと勉強しろって言いたいんだけどね。

976 名前:側近中の側近 ◆0351148456 [2008/03/09(日) 22:02:33 ]
(っ´ω`)っ
おもいっきりスレ違いだね
いきててごめんね

977 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:01:20 ]
「余分な空行」という夢オチ

978 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:18:21 ]
CSVファイルはRFC 4180の仕様だと、
最後のレコードの後には改行はあってもなくてもいいらしい。
オレの場合は最後のレコードの後には必ず改行付けるけどね。

979 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:25:11 ]
975のようなテキストをメモ帳か何かテキストエディタで開いたとき、
aaa
bbb
ccc
I ← ここにカーソルが移動できる
ということを「最後に余分な空白行ができてしまう」と言っているんだと思った。
だとしたら、それは最後にCRLFを置いているからだとしか言いようがない。

980 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:26:00 ]
excel2003
xp
他のシートの複数セルのSetの仕方がわかりません。

Dim Rng AsRange
Sheets("sheet2").Activate
Set Rng = Range(Cells(1, 1), Cells(2, 2))
Sheets("sheet1").Activate
Set Rng = Nothing
こう書けば一応動くのですがWithを使い
With Sheets("sheet2")
Set Rng = Range(.Cells(1, 1), .Cells(2, 2))
End With
と書いてもsheet1のA1: B2が入ってしまいます。
よろしくお願いします。



981 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:40:10 ]
Set Rng = .Range(.Cells(1, 1), .Cells(2, 2))

982 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 02:39:29 ]
Unix文化ではうんたらかんたら

983 名前:デフォルトの名無しさん [2008/03/10(月) 12:48:36 ]
「#N/A」のようなエラーセルの値を変数に入れようとすると
「型が一致しません」というエラーが出るのですが、
例えばエラーセルの値をコンスタントに、「""」として処理するような
事は可能なのでしょうか?

VBAがセルのエラー値をどのように扱っているのか、
msgboxで出すことも出来ないので
困っています。

お知恵拝借できると幸いです。

984 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 13:04:33 ]
トラップ処理すれば

985 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 13:38:14 ]
If(IsError(...

986 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 13:39:51 ]
ttp://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/if_is.htm#is


987 名前:983 [2008/03/10(月) 14:27:26 ]
>>984-986
ありがとうございます。
どちらかの方法でやってみようと思います。

988 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 16:59:57 ]
Ctrl+セルクリックで選択範囲を追加していけますよね
それをVBAで行うにはどうしたらいいですか?
例えば.Cells(i,j)が選択してある状態で、さらにCells(i+10,j)を追加で選択するにはどうしたらいいですか?

.Cells(i,j).Select
hoge
.Cells(i+10,j)Select ←ここで、それまでの選択範囲に追加する形にしたい


989 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 17:23:03 ]
selectionでrange取得
rangeに新cellを追加
追加したrangeをselect

990 名前:988 mailto:sage [2008/03/10(月) 18:07:51 ]
>>989
>rangeに新セルを追加
はどうやって実現するのですか?



991 名前:デフォルトの名無しさん [2008/03/10(月) 19:46:03 ]
Excel2003
XP SP2

結構でかいファイルのI/Oやコピーなどの処理をワーカースレッドで行なうことは可能でしょうか?

992 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:46:02 ]
>>990
union


993 名前:デフォルトの名無しさん [2008/03/10(月) 20:52:13 ]
勉強中の者です。初歩的な質問で申し訳ないのですが、お力添えをお願いします。

条件分岐で、"A1"セルに何か入っている場合に実行、
空欄の場合はエラーメッセージを出したく思います。

if range("A1") = true then
msgbox("実行")
else
msgbox("空欄です。")
end if

としてみたのですが、思うように動作致しません。
てっきり、false = 0 、 true は何か要素がある。と頭にあったのでやってみたのですが、
VBAの壁にぶちあたっております。

何卒、ご助力を賜りたく存じます。よろしくお願いします。

994 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:57:49 ]
=""

995 名前:デフォルトの名無しさん [2008/03/10(月) 21:21:05 ]
If Range("a1").Value <> "" Then
MsgBox "何か入っている"
Else
MsgBox "空欄"
End If

996 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 21:35:39 ]
false = 0 、 true = -1
0 = false、 0以外 = true


997 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:03:18 ]
if Typename(Range("A1")) <> "Empty" then 〜
ではどうか

998 名前:デフォルトの名無しさん [2008/03/10(月) 22:47:48 ]
みなさんありがとうございます。
検証してる間にスレ落ちしてしまうと申し訳ないので、お礼だけ先に。

明日検証いたします。
本当にありがとうございました。

999 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 08:20:17 ]
.

1000 名前:小倉優子 ◆YUKOH0W58Q mailto:sage [2008/03/11(火) 08:20:37 ]
1000ならジュースでも飲むか



1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






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

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

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