VBA総合質問スレッド
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/06/27(火) 21:40:15ビジネスsoftあたりにある各Office製品の専用スレッドで質問した方が解答早いような
気もしないでもないですが気軽に利用してください。
質問にあたっては、MS-Officeのバージョンと製品名を明記した方が答える方も楽で
相互に利益があると思いますけど、そもそも環境を書かないような奴は>>1なんて
読まないから意味ないよね。
関連スッドレ
VBプログラマ質問スレ(6.0以前) Part48
http://pc8.2ch.net/test/read.cgi/tech/1146678926/
Excel総合相談所 46
http://pc8.2ch.net/test/read.cgi/bsoft/1150639357/
Word(ワード)総合相談所 Part12
http://pc8.2ch.net/test/read.cgi/bsoft/1144207197/
ACCESS総合相談所 その15
http://pc8.2ch.net/test/read.cgi/bsoft/1142586697/
PowerPoint(パワーポイント)総合相談所 Part3
http://pc8.2ch.net/test/read.cgi/bsoft/1132333532/
Outlook総合相談所 Part6
http://pc8.2ch.net/test/read.cgi/bsoft/1131763385/
0002デフォルトの名無しさん
2006/06/27(火) 22:33:120003デフォルトの名無しさん
2006/06/27(火) 22:35:580004デフォルトの名無しさん
2006/06/27(火) 22:52:11Sheet.Cells(x,y).???
0005デフォルトの名無しさん
2006/06/27(火) 23:05:23http://homepage3.nifty.com/bear/vbatec/vbatec07.htm
0006デフォルトの名無しさん
2006/06/27(火) 23:14:16ありがとうです
0007デフォルトの名無しさん
2006/06/27(火) 23:14:49シートを並べ替えるようにしたいのですが
例えば、6月1日と6月12日というシートがあると6月12日のシートが先に来ます。
6月1日を先に持ってくるにはどのように直せばいいでしょうか?
Sub シートを並び替える()
Dim i As Long, j As Long, cut As Long
Dim buf() As String, swap As String
cut = Application.Worksheets.Count
ReDim buf(cut)
For i = 1 To cut
buf(i) = Worksheets(i).Name
Next i
For i = 1 To cut
For j = cut To i Step -1
If buf(i) > buf(j) Then
swap = buf(i)
buf(i) = buf(j)
buf(j) = swap
End If
Next j
Next i
For i = 2 To cut
Worksheets(buf(i)).Move after:=Worksheets(i - 1)
Next i
End Sub
0008デフォルトの名無しさん
2006/06/28(水) 08:39:39あと、シート並べ替えでbuf(1)を処理してない事も問題だと思う。
0009デフォルトの名無しさん
2006/06/28(水) 19:30:400010デフォルトの名無しさん
2006/06/28(水) 19:40:36私はこんな感じのを作って使ってます。
Sub 並べ替え()
Dim i As Integer
Dim j As Integer
Dim mycnt As Integer
Dim hi As String
mycnt = Worksheets.Count
For j = 1 To mycnt
For i = 1 To mycnt
Cells(i, 26).Value = Worksheets(i).Name
Next
Range("z:z").Select
Selection.Sort Range("z1")
hi = Format$(Cells(j, 26).Value, "m月d日")
Range("z:z").ClearContents
Worksheets(hi).Move after:=Worksheets(mycnt)
Next
End Sub
一旦ワークシートのデータに差し障りの無い列(今回はZ列)に
シート名を書き出して昇順に並べ替えて、シートに反映させてます。
書き出したり削除したりがマヌケな感じなのですが、ソートが楽なので・・・。
00117
2006/06/28(水) 19:52:32レスありがとうございます。
なるほど…これは(・∀・)イイ!!
いただきます。
0012デフォルトの名無しさん
2006/06/29(木) 00:00:300013デフォルトの名無しさん
2006/06/29(木) 11:29:38Case1,Case2…Case Elseっていう風に条件を当ていき、
Case Elseに条件が当てはまった時にCase Elseの
処理を実行してからEnd Selectに行かないで
その数字でまたSelect Caseをやり直す方法ってありますか?
初歩的な質問ですみません、どなたか教えてください
0014デフォルトの名無しさん
2006/06/29(木) 15:10:51なんでわからないのに「初歩的な」なんて勝手に決めつけるんだ?
ちなみに、質問にはSelect文を「Do Until」「Do while」「For loop」なんかで囲んで
条件を満たすまで回せばいいと思う。
0015デフォルトの名無しさん
2006/06/29(木) 17:22:32繰り返し処理(またSelect Caseをやり直す)の方法がわからないなんて質問するんだ?
激しく疑問だ。
0016デフォルトの名無しさん
2006/06/29(木) 17:27:170017デフォルトの名無しさん
2006/06/29(木) 19:59:100018デフォルトの名無しさん
2006/06/30(金) 10:04:000019デフォルトの名無しさん
2006/06/30(金) 10:14:500020デフォルトの名無しさん
2006/06/30(金) 17:09:490021デフォルトの名無しさん
2006/06/30(金) 19:10:140022デフォルトの名無しさん
2006/06/30(金) 20:56:05>そもそも環境を書かないような奴は>>1なんて
>読まないから意味ないよね。
INTERCALのドキュメントみたいなこと書くなよw
0023デフォルトの名無しさん
2006/07/02(日) 07:19:24ぶっちゃけ、VBAプログラミングだけで職にありつけますかね?
0024デフォルトの名無しさん
2006/07/02(日) 09:04:35そりゃあんた、英語喋れるけど通訳で喰えますか? って聞くようなもんだよ。
0025デフォルトの名無しさん
2006/07/02(日) 09:36:59私の知る限りではあつけません
002623
2006/07/02(日) 22:09:340027デフォルトの名無しさん
2006/07/03(月) 07:42:22DZAMTP.DLLというソフトを探しています。
以前はインターネットからダウンロードできたのですが
今はできなくなっております。
もしどなたか所持されていたら二次配布とかしていただけないでしょうか?
VBAの質問とは少し違いますし、いきなりこのようなお願いをして申し訳ありません。
0028デフォルトの名無しさん
2006/07/03(月) 11:37:353000円でどなたか譲って頂けませんか?
[email protected]
0029デフォルトの名無しさん
2006/07/03(月) 12:42:20ふむふむ
http://www.amazon.co.jp/exec/obidos/ASIN/4871938905/qid%3D1151897888/249-8296353-6135550
0030デフォルトの名無しさん
2006/07/03(月) 17:11:18DZAMTP.DLLは持ってないけどここなんてどう?
VBA応用:CDOでメール送信
ttp://www.asahi-net.or.jp/%7Eef2o-inue/vba_o/sub05_800_080.html
0031デフォルトの名無しさん
2006/07/03(月) 22:02:56For...NextやDo...Loopを使うとき、整数型の変数はよく「i」とか「j」を使いますよね?
同じプロシージャの中で何度もFor...NextやDo...Loopを使うとき「i」とか「j」を
使い回しているんですけど、何か後半に重くなっていくような気がするんですが
こういう使い方はよくないのでしょうか?
一つ一つのFor...NextやDo...Loopには別の変数を割り当てるほうがよいのでしょうか?
それとも、自分でわかりさえすれば問題ないのでしょうか?
0032デフォルトの名無しさん
2006/07/03(月) 23:15:38ありがとうございます。
大変助かりました。
是非参考にさせていただきます。
あと今更気づいた自分の恥ずかしい間違い
DZAMTP.DLLじゃなくてDZSMTP.DLLでした
0033デフォルトの名無しさん
2006/07/03(月) 23:42:22大丈夫
0034デフォルトの名無しさん
2006/07/04(火) 00:51:13ありがとうございます
たまにプロシージャの最後の方で
変数 = Nothing
とかやってますよね?
アレってやった方がいいんですか?
0035デフォルトの名無しさん
2006/07/04(火) 01:11:47でも、必ずしも必要というわけではない。
もっと言えばなぜそうしてるか理由を理解するのがいい。
003632
2006/07/04(火) 13:21:47変数 = Nothing
ってゆうのはどうゆう操作なんですか?
変数を初期化してメモリを開放するってことですか?
変数は型によって2バイトとか16バイトとかって本に書いてましたが
実際2バイトとか16バイトとかが何に影響するのか分かりません
最近のパソコンはメモリもGBクラスですがそれでも何かに影響ありますか?
質問ずくめですいません
0037デフォルトの名無しさん
2006/07/04(火) 17:19:31言ってる通り数バイトしかメモリを使用しないし、メモリの解放も自動でしてくれる
だから「変数 = Nothing」はしなくても良い。#つーかやろうとしたらエラーになるでしょ
Object型のサブクラスの「オブジェクト変数」ならしたほうがいい
「変数 = Nothing」することで参照回数が1回減る。
オブジェクト変数が指しているオブジェクトが持っている参照回数が0になると自動的に
オブジェクトの終了処理とメモリ解放処理を実行してくれる。
またこの変数がnothingになっているので間違えて使おうとした場合、確実に
エラーになるのでミスが速く見つかるメリットがある。
オイラの場合、こちら側のメリットが大きいと思うのでオブジェクト変数の場合
「変数 = Nothing」
をしている
003832
2006/07/04(火) 17:53:28イメージで言うと
「変数 = Nothing」は
「変数 = ""」
ではなく、
「この変数はこのプロシージャではもう使わないから削除してください」
って意味で、「Nothing」以降は同一プロシージャでその変数は使えなくなるってことですか?
Object型って事は、「As Worksheet」とか「As Range」等と宣言した変数って事ですよね?
何度もすいません、よろしくお願いします
0039デフォルトの名無しさん
2006/07/04(火) 19:10:03正確に言えば
>「この変数はこのプロシージャではもう使わないから削除してください」
ではなく
「この変数はオブジェクト変数が指していたオブジェクトとはもう関係ありません」
「この変数はもうどのオブジェクトとも関係ありません」かな?
>「Nothing」以降は同一プロシージャでその変数は使えなくなるってことですか?
再びSetすればその変数は使えます。ただし、新しくセットオブジェクトに対しての処理になりますが。
>Object型って事は、「As Worksheet」とか「As Range」等と宣言した変数って事ですよね?
そうです。プロパティとかメソッドがある奴のことと考えておいて間違いはないと思う
0040デフォルトの名無しさん
2006/07/04(火) 20:59:01と説明できれば楽なんだが
004132
2006/07/04(火) 21:15:29返事が遅れてすいません、非常によく分かりました
本当に参考になりました。ありがとうございました
>>40
ガベコレは分かりませんが、ググってみます
ありがとうございました
0042デフォルトの名無しさん
2006/07/05(水) 02:22:38調べてもこれというのが見つからなかったので教えて下さい.
やりたい内容としては,1 つの book にある複数のシートを
(例えば sheet1,sheet2,sheet3 でそれぞれのシートの一部のセルには
式が入ってます)sheet1.xls,sheet2.xls,sheet3.xls として保存する,
ということです.
マクロの記録でいろいろ試した結果,
Sheets("sheet1").Copy
ActiveWorkbook.SaveAs "C:\sheet1.xls"
ActiveWorkbook.Close
を繰り返せばおおむね望む結果は得られるのですが,
画面がちらつくのと,本当にこの方法がベストなのか疑問に
思ってます.
あと,上の方法でコピーをすると書式までコピーされてしまい
sheet1.xls を開くとリンク先との連携を毎回聞かれてしまうため,
値だけを sheel1.xls に保存する方法を取りたいです.
0043デフォルトの名無しさん
2006/07/05(水) 02:59:07>画面がちらつく
ぐぐれば答えが得られるんでないかな。要は、一時的に再描画を止めてしまえばいい。
#ついでに再計算も止めると処理も速くなってなおよし。
>値だけを sheel1.xls に
マクロ記録でコピー→値だけペーストをやってみれば判るんで内科医?
0044デフォルトの名無しさん
2006/07/05(水) 03:23:25馬鹿
0045デフォルトの名無しさん
2006/07/06(木) 00:45:04(゚д゚)?
0046デフォルトの名無しさん
2006/07/06(木) 23:29:48画面がチラつくに関しては、画面の表示更新を一時的に固定する。
Application.screenupdating=FALSE
リンクなどを聞いてくるメッセージを出さないよいにするのは
Application.Displayalarts=FALSE
0047質問
2006/07/06(木) 23:53:23使う言語はVBA5.0です。
Commandをクリックしたら文を書いてあるウィンドウを表示させるプログラムってどう書いたらいいんですか?
0048デフォルトの名無しさん
2006/07/07(金) 00:25:20Private Sub Command1_Click()
Msgbox "〜"
End Sub
みたいな感じかな?
オブジェクトとかなら
Private Sub Command1_Click()
Dim ObjectName As Object
Set ObjectName = New Object
ObjectName.Show
〜
〜
Set ObjectName = Nothing
End Sub
とかかな?
携帯でコード書くの疲れる。
0049デフォルトの名無しさん
2006/07/07(金) 00:28:14メッセージというか文を書いてあるウィンドウか…
0050デフォルトの名無しさん
2006/07/07(金) 03:39:24VBAでは計算に時間がかかりすぎるためにVBで計算しようとおもうのですが、
VBにはそもそもエクセルファイルのSheet1のように数値データをのせるシートがないような気がします。
どうやって計算するのでしょうか?
0051デフォルトの名無しさん
2006/07/07(金) 11:50:112次元配列ならシートに見立てるのも簡単でしょ?
0052デフォルトの名無しさん
2006/07/07(金) 15:43:370053デフォルトの名無しさん
2006/07/07(金) 15:50:270054デフォルトの名無しさん
2006/07/07(金) 21:27:36配列ってなんですか?
0055デフォルトの名無しさん
2006/07/07(金) 22:55:50VBシリーズ(.NET以前)の計算速度比較
VB(exe) >>>>> VB(デバッグ実行) = VBA >>>>> VBS
005642
2006/07/08(土) 01:09:26どうも回答ありがとうございました.
> Application.screenupdating=FALSE
についてはおかげさまで画面がチャカチャカ動くのは抑止
できたのですが,まだ,最小化するところのバー(なんて
言うのでしょうか?)が忙しそうに動きます.
完全にバックグラウンドで実行するのは無理なんでしょうか?
>>値だけを sheel1.xls に
>マクロ記録でコピー→値だけペーストをやってみれば判るんで内科医?
説明が足りなかったんですが,"見えている値" を書式なしで
コピーしたい,ということなんです.たとえば,セルに today()
が入っていたとして,コピーしたいのは,2006/7/8 ですが,値で
貼り付けると 38906 というシリアル(?)が入力されてしまいます.
> リンクなどを聞いてくるメッセージを出さないよいにするのは
> Application.Displayalarts=FALSE
ActiveWorkbook.SaveAs "C:\sheet1.xls" の時点で sheet1.xls
にこの属性を持たせることが可能でしょうか?
0057デフォルトの名無しさん
2006/07/08(土) 01:18:17SaveAsでは出来ないが、どうしてもというなら、CreateObjectを使えば
完全にバックグラウンドで動作可能。
やり方は、CreateObject Excel.Applicationでググってくれ。
0059デフォルトの名無しさん
2006/07/08(土) 03:12:57リンクはされなくていいんだよね?
シートをコピーするのではなく、セル範囲でコピーするのはどう?
Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
で貼り付ければ見た目だけがコピーされます。
0060デフォルトの名無しさん
2006/07/08(土) 05:38:58Sheets("sheet1").Copy
ActiveWorkbook.SaveAs "C:\sheet1.xls"
ActiveWorkbook.BreakLink Name:="リンク先の名前", Type:=xlExcelLinks
ActiveWorkbook.Close True
これだとリンクが切れるので、リンク更新のメッセージ出ないし
値のみ(見た目だけ)がコピーされますよ。リンク以外の数式はコピーされます。
シートの設定を変えているのでCloseの後にTrueを指定してください。
でないと「変更を保存しますか?」のメッセージが出ますので。
0061デフォルトの名無しさん
2006/07/08(土) 06:38:31聞き慣れないなーと思ってググったらVB5から使える利口物なんだね。
学生時代に買ったVB4アカデミックしか持ってないから知らなかったよorz
一つ賢くなりますた。
0062デフォルトの名無しさん
2006/07/08(土) 08:53:54仕様変更はしなくていいから、
エディタのホイールスクロールだけ有効にしてください_| ̄|○
0063デフォルトの名無しさん
2006/07/08(土) 15:25:45漏れはOS、XPぢゃないから諦めたorz
0064デフォルトの名無しさん
2006/07/08(土) 16:24:24まずやりたい事ですが、
http://www.omegachart.org/faq.htmlの
「データの取得」の第7項目の「データをインポートしたい」です
製作途中のExcelファイルをアップしていますので参考にして頂ければ幸いです
http://gt2-.hp.infoseek.co.jp/cgi-bin/img/8734.zip
データを作成する段階までは出来たのですが、バイナリファイルとして保存する方法が分かりません
今の段階で出来ているのは"2462現段階"ファイルです
アップしたファイル中のExcelファイルに"2462現段階"を出力したコードを添付しています
マクロを含んでいるので開くときに警告が出ると思いますが、決して怪しいものではありません
このExcelファイルのSheet1にデータのフォーマットを解説してあります
バイナリファイルに詳しい方なら"2462完成目標"と"2462現段階"ファイルをバイナリエディタで
開いて頂ければダメなところがお分かりになると思うのですが…
目的はアップしたファイル中の"2462完成目標"形式のファイルをExcelで出力することです
どうかよろしくお願いします
006564
2006/07/08(土) 16:33:10こちらで解説させて頂きます
シート2462の1行目を例にして説明します。レコードはH列までです。
20051208672000772000572000772000708124
8桁(4バイト)の16進数に変換
0131F508000A4100000BC7A00008BA60000BC7A0000ACE1C0000000000000000
後ろから2桁(1バイト)ずつ逆順に連結
08F5310100410A00A0C70B0060BA0800A0C70B001CCE0A000000000000000000
A列からH列を連結した値が1日分32バイトのデータです。
08F5310100410A00A0C70B0060BA0800A0C70B001CCE0A000000000000000000
006664
2006/07/08(土) 16:36:55シート2462の1行目を例にして説明します。レコードはH列までです。
20051208■672000■772000■572000■772000■708124■(空白セル)■(空白セル)
8桁(4バイト)の16進数に変換
0131F508■000A4100■000BC7A0■0008BA60■000BC7A0■000ACE1C■00000000■00000000
後ろから2桁(1バイト)ずつ逆順に連結
08F53101■00410A00■A0C70B00■60BA0800■A0C70B00■1CCE0A00■00000000■00000000
A列からH列を連結した値が1日分32バイトのデータです。
08F5310100410A00A0C70B0060BA0800A0C70B001CCE0A000000000000000000
0067デフォルトの名無しさん
2006/07/08(土) 16:52:09ヘルプなどを読んでみて下さい。
Sub foo()
Dim a(32) As Long
a(0) = 1
For i = 0 To 31
a(i) = i
Next
Open "test.dat" For Binary Access Write As #1
Put #1, , a
Close #1
End Sub
006867
2006/07/08(土) 16:53:4301 00 00 00
になります。
007064
2006/07/08(土) 17:31:20出来ましたー、出来ましたよっ!
配列変数をValiantからLongにして、Binar AsをBinary Access Write Asにして
訳の分からない16進数への変換を削除したら出来ました
本当にありがとうございます、かれこれ1週間ほど答えを探してました
何か言葉だけで感謝し足りないぐらい感謝してますよー!
本っ当にありがとうございました
007167
2006/07/08(土) 17:44:31007242
2006/07/09(日) 02:03:19回答ありがとうございます.
>>60 さんの方法でやりたいことが実現できました.
ありがとうございました!
完全にバックグラウンドでやる方法は下のページなど見て
いろいろ試してみたのですが,勉強不足もありうまくいき
ませんでした.
ttp://www.accessclub.jp/vbakaisetu/50.html
ttp://www.happy2-island.com/vbs/cafe02/capter00406.shtml
もうちょっと勉強して出直してきたいと思います.
0073デフォルトの名無しさん
2006/07/09(日) 02:22:43open officeってExcelより速いですか?
0074デフォルトの名無しさん
2006/07/09(日) 02:25:18もうやってるならアルゴリズムを見直すとか
openofficeは試してみれば?
0075デフォルトの名無しさん
2006/07/09(日) 10:05:20互換性ないんでないの?
0076デフォルトの名無しさん
2006/07/09(日) 20:19:03エクセルでWebのテーブルをダウンロードする時、
ActiveSheet.QueryTables.Add〜(以下略
ってコード書きますよね?
これだとActiveSheetの指定セルに指定したテーブルを取り込む事になると思いますが、
これをシートに落とさず配列変数に落とすような事は出来ないのでしょうか?
イメージで言うと、
Dim DwnStr as Valiant
DwnStr.QueryTables.Add〜(中略)〜, Destination:=DwnStr(0,0)
みたいなカンジです
それともやはり、Webからのダウンロードは一旦シートに落とさなければいけないでしょうか?
0077デフォルトの名無しさん
2006/07/10(月) 07:31:06それがイヤなら自分で実装すればいいだけ。
シートに落とすならVBAの話だけど、そうでないならVB6の話だね。
007876
2006/07/10(月) 09:47:47やっぱりそうですか
QueryTables.Addで出来ないってわかっただけでも収穫ありました
APIにMSXML2.XMLHTTPってゆうのがありますね
使えるように勉強してみます、ありがとうございました
今度依頼されたのが、ネットから情報を取得して出力された情報を
Excelに表示するようなマクロ。
こういうのは初めてで、なおかつ覚えるなら完璧に覚えたいので、自腹で本買って作業に入る前に勉強したいです。
何かその辺の記述が詳しいオススメの本があれば誰か教えてください。
一応Excelマクロは何度か作っていて、今の会社でも稼働管理システムに関わってるので、ある程度難しい本でも理解できると思います。
資料として欲しいのは
・該当Webの入力フォームにセルの値(ID等)をセットして検索
・検索結果をExcelに取り込む
厳密に言えば1つ目だけでもいいんですが…(2つ目は外部データの取り込みをマクロ保存して少し変えればできるイメージなので…)
↑考え甘いですか?
0081デフォルトの名無しさん
2006/07/11(火) 03:21:35メニュー ツール(T) マクロ(M) 新しいマクロの記録(R)
メニュー データ(D) 外部データの取り込み(D) 新しいWebクエリ(W)
本買うまでもない
>・該当Webの入力フォームにセルの値(ID等)をセットして検索
たいていのサイトは、
http://www.google.co.jp/search?hl=ja&q=TEST&lr=
みたいに、?パラメータでいけるけど
できなければ直接Excelに取り込めないので、IEオブジェクト作ってPOSTしたりして
必要なデータのみをExcelのシートに書き込むしかないかもね(初心者には難しいかも)
レスどうもです、それとごめんなさい。家ではネット繋いでないので、示していただいたリンクは見れませんでした。
ただ、IEオブジェクト〜からの流れが、自分の引き出しにまだなくて、色々探してみたんですが、詳細を記載したページを見つけられませんでした。
自分は応用力はあるつもりなんですが、基礎を覚えるのに人一倍時間がかかる子なので、
コレを機にみっちり覚えようと思ってます。
EXCELでネットワーク関連の制御を詳しく書いた本があれば是非教えて下さい。多少難しくても本気で覚えますので。
0083デフォルトの名無しさん
2006/07/11(火) 06:25:12無い。だって解説する必要無いもん。
なぜなら、その辺は普通のVisual Basicと被るから。
Excelのブックやシート、またはシート上のグラフや図形などのオブジェクト操作はExcel VBAの分野だが
ネットワーク関連なんてのは>>81が教えてくれたような機能使うのでなければExcel VBAでもVisual Basicでもやること一緒。
だからぶっちゃけて言えば、VB言語について勉強しなさいってこった。
VB6の解説本、VB6の解説サイトなら、ネット関連について解説してる物が腐るほどあるし
その方法はほぼ例外なくVBAで使える。
ハナっからVBAの機能と絞って考えてたんで、VB関係の本はスルーしてました。
よく考えたらそうですよね。
今日辺り書店をさまよってみます。
>>81さん、>>83さんありがとうございました。
0085デフォルトの名無しさん
2006/07/11(火) 17:03:16>IEオブジェクト〜からの流れが、自分の引き出しにまだなくて
先ずは、
メニュー ツール(T) マクロ(M) Visual Basic Editor(V)
メニュー ツール(T) 参照設定(R)
で、Microsoft Internet Controls をチェックしてOKする
メニュー 挿入(I) 標準モジュール(M)
で、新規モジュールを作成して、下記のサンプルをコピペして応用してみてはいかが?
Option Explicit
Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Sub test()
Dim ie As SHDocVw.InternetExplorer
Dim SettingTxt
Set ie = New InternetExplorer
'ie.Visible = True
ie.Navigate "http://pc8.2ch.net/tech/SETTING.TXT"
While ie.Busy
Sleep 100
DoEvents
Wend
While ie.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
SettingTxt = ie.Document.Body.outerText
n = InStr(1, SettingTxt, vbNewLine) - 1
Debug.Print "Board ID=" & VBA.Left(SettingTxt, n)
Debug.Print "Date=" & ie.Document.LastModified
ie.Quit
Set ie = Nothing
End Sub
008685
2006/07/11(火) 17:05:310087デフォルトの名無しさん
2006/07/11(火) 17:12:49> Microsoft Internet Controls
> Microsoft Internet Controls
> Microsoft Internet Controls
> Microsoft Internet Controls
この用途でMicrosoft Internet Controlsですか、そうですかw
0088助けて
2006/07/11(火) 17:25:42エクセルを立ち上げて、Sheet1のセルA1〜A50に数字を1から50までを入力し、セルD4に1から50の合計、D5にその平均を求める。VBAからエクセルの関数を呼び出すときには、Worksheetfunktionというオブジェクトを使用する。セルC4に「合計」、セルC5に「平均」と入れる。
ソース解説ありがとうございます。もしかしたら>>87さんの言うように、
今回の自分の用途とは異なるかもしれませんが、試してみたいと思います。
自分には珍しく、今かなり色々覚えてみたい気力に溢れてるのでw
0090デフォルトの名無しさん
2006/07/11(火) 17:50:370091デフォルトの名無しさん
2006/07/11(火) 19:57:22>この用途でMicrosoft Internet Controlsですか、そうですかw
>IEオブジェクト〜からの流れが、自分の引き出しにまだなくて >>82
※注) >>79-80 に対するレスではない
0092デフォルトの名無しさん
2006/07/11(火) 23:05:56自分で解かないと意味無いでしょ。
0093デフォルトの名無しさん
2006/07/12(水) 06:39:260094デフォルトの名無しさん
2006/07/12(水) 09:59:380095デフォルトの名無しさん
2006/07/12(水) 10:09:33なにコイツ?
0096デフォルトの名無しさん
2006/07/12(水) 10:32:39確かにそのどちらなのかで方法が違うから、「ハッキリしろ」というのは同意だが、94もハッキリ言ってやれよ
回りくどく言っても93や95みたいな初心者には伝わらないぞ
0097デフォルトの名無しさん
2006/07/13(木) 00:48:16本を見ながら書いたものなのですがどうしてエラーになるのかわかりません。。
sub createppt()
dim ppoint as object
dim ppres as object
dim pslide as object
Set ppoint = CreateObject("powerpoint.application")
Set ppres = ppoint.presentations.Add
Set pslide = ppres.slides.Add 'ここでエラー
end sub
使用ソフトはoffice xpです。解決方法が解る方宜しくお願いします。
0098デフォルトの名無しさん
2006/07/13(木) 01:17:27言語に拠らず、エラーが起きてもエラーメッセージを書かない。
009997
2006/07/13(木) 01:37:07実行時エラー450
引数の数が一致していません。または不正なプロパティを指定しています。
です。
と言っても実際のツールを作る参考になる程度の初歩的なものですが…
その先は、作ったものを応用して頑張ってみます
色々ご回答いただきありがとうございました。
0101デフォルトの名無しさん
2006/07/13(木) 11:09:29エラーに対して、その意味を調べたり考えたりしようとせず
「エラーが出た、どうにかしてくれ。」と丸投げで他人を頼る。
「引数の数が一致してない」可能性と、「不正なプロパティ(メソッド)を指定してる」可能性は、
完全に否定出来るのか?なら、それをきちんと書け。
否定しきれないなら、まだまだ自分で出来ることは有るはずだ。
0102デフォルトの名無しさん
2006/07/13(木) 12:40:38って名前です。
ComboBox1.AddItem "A"
これを「ComboBox1」〜「ComboBox10」までやるのにFor Next構文は使えないのですか?
使えるとしたらどう記述するのですか?
0103デフォルトの名無しさん
2006/07/13(木) 12:49:10そこでコントロールを配列にするんですよ
0104デフォルトの名無しさん
2006/07/13(木) 13:09:21VBならね。
でもVBAではコントロール配列は使えないので、
コントロールコレクションを利用するか、
クラスを使って疑似コントロール配列を実装するんですよ。
0105デフォルトの名無しさん
2006/07/13(木) 16:21:18Dim aryLine
aryLine = Split(string, ":")
とやれば、スプリット後の各文字列が配列に代入されますが、
VBAでは、
Dim aryLine As String
aryLine = Split(string, ":")
とやってもできないようです。
どのようにすればいいのでしょうか。
0106デフォルトの名無しさん
2006/07/13(木) 17:06:18Stringじゃなくて、Variantで宣言しないといけなかったようです。
0107デフォルトの名無しさん
2006/07/13(木) 17:20:23「Variant型で宣言しなくてはならない」、「Variant型が正しい」ということは無い。
誤魔化しの手法として、Variant型に逃げる道があるだけ。
Dim aryLine() As String
aryLine = Split(string, ":")
0108 ◆MutsukiYtk
2006/07/13(木) 20:26:49For IntX = 1 To 10 Step 1
Me.Controls("ComboBox" & IntX).AddItem "A"
Next
携帯から書いてるからスペル違うかも。
セットをWorkBook_Open時に行ったところ、エラーになりました。
イミディエイトウィンドウで確認すると、定数には値が入っていません。
WorkBook_Open時は元々標準モジュールは見ていないんでしょうか?
もしそうだとしたら、標準モジュールでの定義が反映されるタイミングを知りたいです。
Const→Public Constに変えるだけで解決しました
アホや俺…orz
0111デフォルトの名無しさん
2006/07/15(土) 18:23:321、VBAプログラミングのバイブル的な本ってありますか?
2、文法書、コマンド解説書(できたらプログラム例つき)で定番は何でしょうか。?
0112デフォルトの名無しさん
2006/07/15(土) 18:34:20お答えします。
1、あります。
2、Excel VBA ヘルプ(←電子書籍だが超定番)
以上。
条件後出し(具体的な名前出せとか、紙面書籍限定とか)は却下。
0113デフォルトの名無しさん
2006/07/15(土) 19:24:570114デフォルトの名無しさん
2006/07/15(土) 19:27:40ん〜、バイブル的なものはないと思う。
ただ『初めての○○』『×日で覚える○○』的な本は多分バイブルにはならないと思うよ。
パラパラ読んでみて、「あ〜、これちょっと難しいなぁ…」っていう本の方が、長く使える、ある意味の『バイブル』になるんじゃないかな。
つか俺の愛用本書こうと思ったけど、どのVBAか記述がないので。俺Excelのしかないけどいいのかな?
一応某VBA掲示板(多分モーグでググると出る)で質問に普通に答えれるくらいの知識は身に付いたよ。
>>112
まぁ、なんつ〜か意地悪じゃね?
0117デフォルトの名無しさん
2006/07/15(土) 20:24:09マイクロソフトのヘルプは「わかったあとで、やっと何を説明してたか判る。」ことで有名なしろもの。
構文説明や使用例で、マイクロソフト特有の抽象的概念用語持ち出す(手抜きの例でしかない。)から,結局、具体的
には何のことだかわからないよ。これは、vbaに限らず、他のマイクロソフトのプロ倉ミング言語のヘルプ全般
で、殆どのプログラマーが言うこと。cとか言語などのプログラミングで十年以上も経験のあるプロでも異口同音
に共通していう。「マイクロシフトのヘルプ、マニュアルはわかり難い。」ってね。
例えば、ヘルプで"タイマー”でググルと、"On Timeメソッド"って出てくる。
で、以下の説明が出てくる
構文
expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
expression 必ず指定します。対象となる Application オブジェクトを表すオブジェクト式を指定します。
"expression"って何だ。”Application オブジェクト"っていう抽象的概念説明になってる。
こんなに一つの要素を説明するのにコロコロと概念用語で変えただけの説明なら、わかるものでも
無理矢理わからなくしてるのと同じだよ。
OnTime メソッドの使用例
次の使用例は、現在から 15 秒後に my_Procedure を実行します。
Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"
「対象」を見ると、vbヘルプに飛ぶ。もうメチャクチャだよ。でも、見ると。
Application オブジェクト
"Excel アプリケーション全体を表します。Application オブジェクトには、次のものが含まれます。"
ってさ。↑は、もはや日本語として完全に矛盾してるだろ。ヘルプは、このようにメチャクチャな混乱句の集合体でしかない。
0118デフォルトの名無しさん
2006/07/15(土) 20:46:12というように「使用例」まで具体的要素(機能)の名称(例えばセル名等なら「セル名等、プロジェクトで使われてる
オブジェクトの識別名」と、ファイル名なら「ファイル名」と具体的に明示する。)ことなく曖昧にしたまま、
その要素の具体的固有名称も明らかにしないのでは、あくまで抽象的概念用語の説明のままでは、
「ヘルプ」じゃなく手抜による「混乱させるもの」でしかないよ。上の例だって、更には、"my_Procedure"
って何だ。ファンクション名(sub ルーティン名)なのかそれとも、sheet名なのか、それともプロジェクト名
なのか判らない。
0119デフォルトの名無しさん
2006/07/15(土) 21:53:44おばかさんは大変だねぇw
別に巻き込めって意味じゃないですよ、論点が変わってると。
>>111
ちなみに俺の愛用本は翔泳社の『Excel2003VBA辞典』です。
CD-ROMなしで2000円越えしますけど、あまりCDに頼ると覚えるのに時間かかると思ったんで…。この本とは結構長い付き合いです。
0121デフォルトの名無しさん
2006/07/15(土) 23:20:25バイブルと言う訳ではないですが資格板のVBAスレで
何冊か本の名前が挙がってますよ。
資格取得に関しての書籍だしちょっと趣旨が違うかな?
基礎を学ぶ為の物が多かったような気がします。
>>117の言ってる事は正しいと思うよ。少なくとも>>112よりは。
初めて触る人間が『IF』『SELECT』辺りの複数選択肢が出るヘルプを検索した時とか苦労するだろうな、って思うもん。
つかヘルプ見てれば全てが解決するなら本だってこんなに発行されないし、このスレも不要でしょ。
…何か余計な火種増やしただけだったらごめん>ROMってる人他色々
0123デフォルトの名無しさん
2006/07/16(日) 00:16:24expressionはようするにhogeの如くそれ自体に意味はない。
Application オブジェクトと書いてあるのは、Applicationというクラス(型)のオブジェクトと思え。
(VBは型が緩いから意識しないとだめ。オブジェクトと言う言葉が嫌なら変数とでも読み替えろ)
ただし、(Applicationクラスの)Applicationという名前のオブジェクト(言わばグローバル変数)が存在するのがややこしいけど。
VBAのヘルプはわかりにくいとは思うけど、そこまでひどくないと俺は思うよ。
0124デフォルトの名無しさん
2006/07/16(日) 00:33:48Excel固有部分は特にひどい。
0125デフォルトの名無しさん
2006/07/16(日) 07:08:420126デフォルトの名無しさん
2006/07/16(日) 07:49:45タイムシェアリングのモードで動作する関数(メソッドか)はないの。
(つまりは、マルチタスクモードでインターバル動作するやつ)
ユーザーのプロシジャー内で専属でループ、ウェイト動作するんじゃなく、
少なくともvb系なら、vbのタイマーみたいに、バックグラウンドでタイムカウント
して、指定した時間間隔ごとに割込動作で、こっちが作ったプロシージャをコールして
くるっていうのはないの?。
それがないとシーケンシャル動作で(結局はシングルタスクで)タイムカウント中は
一つのマクロにcpuが独占されっぱなしになって、カウント中にどこかのセルでキー入力
するとか、データを変更するとか、とにかくマルチタスク動作できない。
それができなきゃアプリ用言語として使いものにならないんじゃねーの。
0127デフォルトの名無しさん
2006/07/16(日) 08:06:06曖昧でブラックボックスだから、怖くて頭からプログラムする気が起きない。
相手が素人だと思って馬鹿にしてるのか「簡単」とか「便利」とかっていう
謳い文句にかこつけて「手抜き」なんだよ。いつオーバーフロー起こすか
判らないし、どの程度でスタックが動いてるのかも判らないから実際の業務ソフト
としては使えない。スタック領域が曖昧なプログラミング言語なんか、まったく
「遊び」でしかつかえない。これだけメモリが大きくなってる時代に
配列が使えないなんて・・・
0128デフォルトの名無しさん
2006/07/16(日) 08:16:15OnTimerもどき作れば?
SetTimer使えば簡単に出来ると思うが
0129デフォルトの名無しさん
2006/07/16(日) 08:50:43> して、指定した時間間隔ごとに割込動作で、こっちが作ったプロシージャをコールして
> くるっていうのはないの?。
マルチスレッドというならまだしも、その程度ならいくらでも出来るだろ。
使いものにならないのは言語ではなくオマエの頭だw
ちなみにマルチスレッドはVBAの本家最終版であるVisual Basic 6.0 Professionalですら非対応だからね。
0130デフォルトの名無しさん
2006/07/16(日) 08:55:32IDEは進歩無くほぼ同じなんだがw
0131デフォルトの名無しさん
2006/07/16(日) 08:58:53VBの配列ってヒープからとってくるんじゃないの?
0132デフォルトの名無しさん
2006/07/16(日) 09:13:16パラメータになってるときはスタック
プロシージャ内で定義されたときも、スタックじゃないの。
0133デフォルトの名無しさん
2006/07/16(日) 09:21:51http://www.vbalab.net/vbaqa/data/excel/log/tree_566.htm
Excel(VBA)は非同期で呼び出されるコールバック関数は使用することができません。
(VBをIDE環境で実行していても同じですね)AddressOfは同期実行されるAPI(Enum系等)用に
用意されています。VBであればネイティブにコンパイルされている状態でしたら、
特定の条件化であれば非同期で呼び出されるもの(SetTimer, CreateThread等)も使えることが
ありますが、エクセルを含むVBA環境ではまず使えません。
0134デフォルトの名無しさん
2006/07/16(日) 09:23:55マイクソソフトのマニュアルと同じく、おまえは「能書だけ」だ。
0135デフォルトの名無しさん
2006/07/16(日) 09:39:400136デフォルトの名無しさん
2006/07/16(日) 10:12:29要は、マクロ自体をインターバル動作できれば話は早いわけでね。(自動保存みたいにね。)
マクロの環境がそうなっていないというのは、基本設計からして、そういうふうな設計思想ではなかったからだと思うんだが。
0137デフォルトの名無しさん
2006/07/16(日) 10:19:340138デフォルトの名無しさん
2006/07/16(日) 11:11:02一応ネットで検索してみましたがよくわからなかったのでご教授お願いしますm(__)m
VB5で"開く"をテキスト見ながら練習していました
そして実行で"開く"をクリックしたら"実行時エラー426" 複数のMDIフォームは使用できませんと出て先に進めません...(^-^;
対処方を教えて頂きたいです.お願いしますm(__)m
0139デフォルトの名無しさん
2006/07/16(日) 11:42:50MS Officeファミリー マクロ言語Visual Basic for Application(VBA)のスレね。
0140デフォルトの名無しさん
2006/07/21(金) 17:00:16普通はラベルの横幅はルーラーで調整しますよね?
これをコードから変更したいのですが、うまくいきません。
レポートを開くとき、イベントプロシージャで
Me.Width = 5670
というように書いてみるんですが、印刷プレビューにまったく反映されてないのです。
ページ設定→レイアウトのサイズの項目にある幅というところはちゃんと10cmとなっているのに、です。
どうしたらよいでしょうか? ご教授お願いいたします。
0141デフォルトの名無しさん
2006/07/24(月) 18:10:37テキストファイルはテンプレートになっていて、例えば、テキストファイルの$A1とあるところに
セルのA1の値を出力するという感じです。
Javaでvelocityってのがあるみたいですけど、もっと手軽なものを探しています。
Excel2000です。
0142デフォルトの名無しさん
2006/07/24(月) 18:16:43文字列の置き換えで済むんじゃねーの?
0143デフォルトの名無しさん
2006/07/24(月) 18:18:01ダメプログラマの見本
0144140
2006/07/24(月) 18:19:230145デフォルトの名無しさん
2006/07/24(月) 21:12:04マクロが実行されるようにしたいんですけど、どうやったら作れますか?
0146デフォルトの名無しさん
2006/07/24(月) 21:47:34[表示]→[フォーム]→[ボタン]
ボタンにマクロを登録
0147デフォルトの名無しさん
2006/07/24(月) 23:12:51どのような対策が考えられますか?
0148デフォルトの名無しさん
2006/07/24(月) 23:16:281ブックで100シート?
ブックを分割して必要なときに開くようにしたら?
0149デフォルトの名無しさん
2006/07/25(火) 06:51:53構成に因って対策方法は異なる。
構成の詳細内容を文章で聞くのは面倒なので、
アドバイス欲しければブックをうpしろ。
0150デフォルトの名無しさん
2006/07/25(火) 11:45:41下方向に連続コピーできますが、
これを右方向にするにはどうしたらいいですか?
一度の作業には100シートも使わないなら
>>148の言うように、複数Bookに分割したシートを作業によって必要数OPEN
一度に100シート使う(もしくは50シート以上使う為あまり分割しても意味なし)場合
そもそもそれだけのシートを使用する必要があるか考え直す。
例えば何シート使うかわからないから最大数として100シート持ってると言うのなら
必要時にWorkSheets.Addさせた方が絶対効率的。
つか正直1Book100シートも使用するツール?現実的に役に立つように思えないので、
一度見直してみてはどうだろう。
>>150
オートフィルの事を言うてる?ここはVBAすよ。
0152デフォルトの名無しさん
2006/07/25(火) 20:57:05例えばセルとか他のアプリとかでも良いんですけど、右クリックで貼り付けとかって呼び出せるじゃないで
すか。あれをフォーム上のテキストボックスでマウスの右クリックからも呼び出せはしないんですかね。
OS:XP Pro
Excel 2002
です。
0153デフォルトの名無しさん
2006/07/25(火) 21:31:392〜3日書き込まれない程度で(ry
0154デフォルトの名無しさん
2006/07/25(火) 22:03:09エクセルVBAからコマンドボタンをクリックしたいのですができますか?
UserForm1.CommandButton1.click() みたいなことがしたいのですが。
あるいは Sub CommandButton1_click() を外部から呼べればいいのですが、
できません。
どなたかよろしくお願いします。
0155デフォルトの名無しさん
2006/07/25(火) 22:13:14CommandButton1_click
End Sub
0156154
2006/07/25(火) 23:23:32CommandButton1_clickはフォーム内で定義されています
これを標準モジュールから呼びたいのです
Sub aaa()はどこで定義すればよいですか?
フォーム内で定義すると結局Sub aaaが見えません。
TextBox_MouseDownイベントを使ってみたらどうだろう
>>154
コマンドボタンを押した時の命令を別Subにして
クリックしたい時にその別SubをCallすればいいんじゃないかな。
0158デフォルトの名無しさん
2006/07/26(水) 03:41:14モジュール名とコードを貼れ
0159デフォルトの名無しさん
2006/07/26(水) 07:14:53ヒント有難うございます
Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = 2 Then
MsgBox "右クリックされた"
End If
ここの部分にクリップボードから貼り付ける処理を書いて見ます。どうもm(__)m
0160デフォルトの名無しさん
2006/07/26(水) 14:37:360161デフォルトの名無しさん
2006/07/28(金) 00:37:21ヤフオクに出品されてるよぅ!
ってもう読んでないか。
0162デフォルトの名無しさん
2006/07/28(金) 05:41:24入力ミスじゃなければ、このスレのタイトルを見て、VBとVBAの違いをネットで調べてから
もう一度質問してくださいな
0164デフォルトの名無しさん
2006/07/28(金) 16:12:02ユーザーフォームにtextbox1,2とcommandbutton1の3つのコントロールを
配置して
textbox1に下記のコードを記入しました
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1 > 99 Then
CommandButton1.SetFocus
Else
TextBox2.SetFocus
End If
End Sub
ステップインで実行して
100以上の数値を入力した時に同じトコを2度通ってるのですが理由が解りません
どなたか原因の解る方いますか?
0165デフォルトの名無しさん
2006/07/28(金) 16:41:39タブオーダーの順序通りにフォーカスを移そうとしている最中に、
タブオーダーの順序が違うコントロールにフォーカスを移しているから。
0166165
2006/07/28(金) 16:50:49TextBox1のExitイベントが発生した時にフォーカスを持っている
コントロール以外にフォーカスを移しているから
0167デフォルトの名無しさん
2006/07/28(金) 17:08:021回目はExitしたときで2回目はSetForcusを呼ぶことで発生してるんじゃねーの、多分
たぶん、この現象が起きるときはTextBox1に99以上をいれて、1回目のExitを発生させるときに
TextBox2にフォーカスを移してるでしょ?この場合、
TextBox1 -> TextBox2 で一回目のExit発生、ただし、発生した段階でActiveなのはTextBox1
TextBox2 -> CommandButton1 で2回目のExit発生、activeなのはTextBox1なのでTextBox1_Exitが再度呼ばれる
このExit発生ってのがWM_ACTIVATEのメッセージ処理だからじゃない、かな?
TextBox2の代わりにif文の判断と同じコントロールに移す場合、2回目は同じコントロールへの移動ってなるから
Exitイベントが発生しないと思うがどうよ?
0168デフォルトの名無しさん
2006/07/28(金) 22:41:460169デフォルトの名無しさん
2006/07/28(金) 23:40:58すげー!神!!
0170デフォルトの名無しさん
2006/07/29(土) 12:15:14(当然テキストボックスは空の状態)マウスの右クリックでクリップボードからデータを入れた途端、 "テキストボックス
には既にデータが入っています"のメッセージが出てしまいます。
Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim clipboardData As Variant
Dim aFmts, fmt As Variant
Dim MyData As DataObject
If Button = 2 Then
If TextBox1.Value <> vbNullString Then
MsgBox "テキストボックスには既にデータが入っています", vbOKOnly
Exit Sub
End If
clipboardData = Application.ClipboardFormats
If clipboardData(1) = -1 Then
MsgBox "クリップボードにデータが入っていません"
Exit Sub
End If
Set MyData = New DataObject
MyData.GetFromClipboard
TextBox1.Text = MyData.GetText(1)
Set MyData = Nothing
End If
End Sub
Private Sub UserForm_Initialize()
TextBox1.Value = vbNullString
End Sub
現象として>>167さんが言っておられる事のような気がするんですけど、対処方法はどうすれば良いんでしょうか?
0171デフォルトの名無しさん
2006/07/29(土) 15:11:17右クリは無条件に2回呼ばれるようだ
どうしても右クリでやりたければ、1回目2回目を判断するしかないな
テキストボックスの横に貼り付けボタンとかでは駄目なのかな
0172デフォルトの名無しさん
2006/07/29(土) 15:24:09セルを横方向に結合しているとセルの高さの自動調整が行えないので、
改行(文字)回数を取得して調整を行うようにプロシージャを作成しました。
上手くできたと思ったのですが、
セルの書式設定で「折り返して全体を表示」に設定している箇所で
自動改行が行われている箇所の回数取得ができていませんでした。
セル内の自動改行回数を取得するイイ方法思いつかないですか??
0173デフォルトの名無しさん
2006/07/29(土) 15:58:470174デフォルトの名無しさん
2006/07/29(土) 17:10:23>テキストボックスの横に貼り付けボタンとかでは駄目なのかな
これで逃げるのが一番楽みたいですね(^^;。
不必要にコードをややこしくしても仕方が無いし、そうします。どうも有難う。
0175デフォルトの名無しさん
2006/07/29(土) 18:24:06以下のコードを実行しても、結果が0にならないんですけど
どうしてなんでしょうか
Dim a As Double, b As Double, c As Double
a = -9.995
a = a * 100
b = 999.5
c = a + b
MsgBox c
0176デフォルトの名無しさん
2006/07/29(土) 19:34:42説明するの面倒なので「浮動小数点演算 誤差」でググれ。
0177デフォルトの名無しさん
2006/07/29(土) 19:58:09うわ、確かに説明するのが面倒そうなのが出てきました、
結構興味深いことが書いてありそうなのでじっくり見てみます。
ありがとうございました。
0178デフォルトの名無しさん
2006/07/30(日) 02:21:31Dim ary As Variant
ary = Array("a", "b", "c")
Worksheets("Sheet2").Range(Cells(1, 1), Cells(1, 3)).Value = ary
Sheet2がアクティブなときはエラーが出ないのですが
アクティブでないときは以下のエラーが出ます
実行時エラー'1004'
アプリケーション定義またはオブジェクト定義のエラーです。
Sheet2をアクティブにせずに解決する方法はあるでしょうか?
0179デフォルトの名無しさん
2006/07/30(日) 02:28:22Sheet2をアクティブにしちゃいけない理由でも?
もしアクティブシートを変更したくないのなら、現在のアクティブシート名を保存して戻してやればいいだろうし。
0180デフォルトの名無しさん
2006/07/30(日) 06:40:25CellsはRangeのプロパティで、Rangeを省略するとActiveSheetが対象となり、
その結果全体として矛盾した指定になるためエラーになってる。
Range(Cells, Cells)の形式で書きたいんだったら、CellsがどのRangeの
ものかを明記する必要がある。つまり、以下のように書く必要がある。
With Worksheets("Sheet2")
.Range(.Cells(1, 1), .Cells(1, 3)).Value = ary
End With
0181178
2006/07/30(日) 13:12:21ほかのシートで作業中なので裏で動作させたかったんです
>>180
>.Range(.Cells(1, 1), .Cells(1, 3))
こんな書き方ができるんですねえ
うまくいきました
ありがとうございます!
0182デフォルトの名無しさん
2006/07/30(日) 17:44:29せてもらいます。
【1 OSの種類 .】 WindowsXP
【2 Excelのバージョン 】 Excel2000
【3 VBAが使えるか .】 はい(中級くらいです)
【4 VBAでの回答の可否】 可
【5 検索キーワード 】 起動フォーム タイトルバーを非表示
目的はExcel起動時にフォームを表示し、そのフォームのタイトルバーを非表示にす
ることです。
起動フォームの設定はできます。
Sub Auto_Open()
UserForm1.Show
End Sub
また、Excel起動後にシートからマクロを実行し、フォームを起動し、そのフォームの
タイトルバーを非表示にすることもできます。(この方法は書籍に書いてありました)
しかし、Excel起動時に起動するフォームのタイトルバーを非表示にする方法がわかり
ません。どこにどういったVBAを書けばよいのかわからないんです。
どうぞよろしくお願いします。
0183デフォルトの名無しさん
2006/07/30(日) 17:46:47> タイトルバーを非表示にすることもできます。
と同じ方法で。
0184182
2006/07/30(日) 20:34:40今回の目的は起動フォームのタイトルバーを非表示にすることです。サンプルコードを引用しておきます。
--------------モジュールのコードのVBAです。--------------
Private Const GWL_STYLE = (-16)
Private Const WS_CAPTION = &HC00000
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long,ByVal nIndex As Long,ByVal dwNewLong As Long) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
Public Sub Hide()
Dim Ret As Long
Dim hWnd As Long
Dim Wnd_STYLE As Long
hWnd = GetActiveWindow()
Wnd_STYLE = GetWindowLong(hWnd, GWL_STYLE)
Wnd_STYLE = Wnd_STYLE And (Not WS_CAPTION)
Ret = SetWindowLong(hWnd, GWL_STYLE, Wnd_STYLE)
Ret = DrawMenuBar(hWnd)
End Sub
Sub Macro1()
UserForm1.Show
End Sub
--------------フォームのコードのVBAです。--------------
Private Sub UserForm_Activate()
Hide
End Sub
Private Sub CommandButton1_Click()
Unload Me
End Sub
Excel起動後から表示するフォームはこのサンプルコードが使えます。起動フォームのタイトルバーを非表示にする方法がわからないんです。
どうぞよろしくお願いします。
0185デフォルトの名無しさん
2006/08/01(火) 09:19:020186デフォルトの名無しさん
2006/08/01(火) 09:45:41excelワークシートの保護をマクロで実行し、その際にロックされた
セルを選択出来なくしたいのですが、一度実行した直後はうまくいく
のに、一度ブックを閉じてからまた開くと、保護はされていますが、
ロックされたセルが選択できてしまいます。
手動でシート保護を行った場合に同じ設定にすると、一旦ブックを閉じて
もまた設定どおりになっています。
マクロで実行しても同じように出来ないでしょうか?
0187デフォルトの名無しさん
2006/08/01(火) 14:19:16ヒント:マクロの記録
0188デフォルトの名無しさん
2006/08/01(火) 15:44:44ん?
マクロを晒せ!
0189182
2006/08/01(火) 22:32:32サンプルコードをもとにすこしかえてあります。
このコードは誰が書いても同じようなものになるので転載で問題はならないかと。
>186氏
マクロを記録して保存。セキュリティレベルを低で実行。できますか?
起動フォームのタイトルバーを非表示にする方法がまだわからなくて困ってます。
どうぞよろしくお願いします。
0190デフォルトの名無しさん
2006/08/01(火) 23:04:39仕事で初めてVBA使ってみたのですが、良く分かりません・・orz
まず、ブックを開かせます
Dim OpenFileName As String
OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
If OpenFileName <> "False" Then
Workbooks.Open OpenFileName
End If
↑ここまでは動きます。
次に今開いたブックの指定セル番地のデータを、既存のブックの指定セル番地へ持ってきます。
Workbooks("OpenFileName").Worksheets("PG1").cell("1,1").Copy Workbooks("book1").Worksheets("TP1").Range("1,1")
↑ここで「インデックスが有効範囲にありません」というエラーが表示されてとまってしまいます。
最初に開いたブックを指定するにはどのようにすればよいか、どなたかご教授おねがいします。
0191デフォルトの名無しさん
2006/08/01(火) 23:22:55Workbooksコレクションで指定するのは
ファイルパスではなくファイル名
0193デフォルトの名無しさん
2006/08/01(火) 23:59:06>Workbooks("OpenFileName").Worksheets("PG1").cell("1,1").Copy Workbooks("book1").Worksheets("TP1").Range("1,1")
これを
Workbooks(OpenFileName).Worksheets("PG1").cell("1,1").Copy Workbooks("book1").Worksheets("TP1").Range("1,1")
にするとよい。
0194デフォルトの名無しさん
2006/08/02(水) 00:00:430195デフォルトの名無しさん
2006/08/02(水) 00:01:40セルの選択は出来てしまいますが、ロックはされてるので内容の変更は
出来ないようになってますよ。
これではダメなのでしょうか?
選択すら出来ない様にしたいという事ですか?
0197デフォルトの名無しさん
2006/08/02(水) 00:15:59しといて
book.Worksheets("PG1").cell("1,1").Copy Workbooks("book1").Worksheets("TP1").Range("1,1")
試してないけど。
0198デフォルトの名無しさん
2006/08/02(水) 00:22:24Workbooks.Open OpenFileName
fname = ActiveWorkbook.Name
End If
Workbooks(fname).Worksheets("PG1").cell("1,1").Copy Workbooks("book1").Worksheets("TP1").Range("1,1")
0199デフォルトの名無しさん
2006/08/02(水) 00:26:20レスありがとうございます!
さっそく試してみます
0201デフォルトの名無しさん
2006/08/02(水) 00:57:33エラーのメッセージぐらい書け
たぶん、想像はつくが
0202190
2006/08/02(水) 00:58:010203デフォルトの名無しさん
2006/08/02(水) 01:00:550204デフォルトの名無しさん
2006/08/02(水) 01:02:44ブック名のことかと思ったら、あんた根本的に理解できてないよ
0205190
2006/08/02(水) 01:02:51つっこまれると思ってたんですけど、それ(A,1)です
0207デフォルトの名無しさん
2006/08/02(水) 01:04:05めちゃくちゃ
0208デフォルトの名無しさん
2006/08/02(水) 01:05:23出直して来い
0210190
2006/08/02(水) 01:10:420211デフォルトの名無しさん
2006/08/02(水) 01:20:36作業をさせたいところのみを早く調べたいのはわかるけど
ググれば初心者向けにVBA解説してるところとか、サンプルコードを載せて
くれてるところがあるはずだよ。
先に言われている通り、、かなり滅茶苦茶だから面倒臭がらずに調べて
みよう。
0212デフォルトの名無しさん
2006/08/02(水) 01:22:52やりたいことを
マクロに記録
して勉強しましょう
0213デフォルトの名無しさん
2006/08/02(水) 01:57:55cell("1,1")もRange("1,1") もRange(A,1)も間違ってます。
>>212
マクロの自動記録は無駄が多いし、セル操作を学ぶには不向きだよ。
0214デフォルトの名無しさん
2006/08/02(水) 02:03:47# やりたいことがわからないというレスは却下
それを踏まえて、さっきから貼ってる自分のソースを見てごらん。
それと自分が初心者だという自覚があるなら、コピーとペーストを命令分けて書いて
ステップ実行させなさい、そうすりゃどっちがおかしいかわかるから。
Range文の間違い、わからなければヘルプを。
明らかにヘルプを見る手間を省いた質問に、優しく答える人は少ないよ。
つ〜か指摘してるっぽい人達もなんでcell()に触れないのかわからん…
0216デフォルトの名無しさん
2006/08/02(水) 02:15:21ステップ実行って、あんたあれ1行だぞ
0217デフォルトの名無しさん
2006/08/02(水) 02:16:36セル操作を学ぶレベルには到底達していないのだが
それに無駄以前のレベル
間違いに気付ければ丸儲け
0218190
2006/08/02(水) 02:22:21コピーとペーストに分けて、って書いただろ
面倒だから書くわ
Workbooks("Book2.xls").WorkSheets("Sheet1").Cells(1,1).Copy _
(Workbooks("Book1.xls").WorkSheets("Sheet1").Range("A1"))
0220デフォルトの名無しさん
2006/08/02(水) 02:27:23> Sub HideColumns(xcolumns As String)
> Dim strColumns As String
> strColumns = xcolumns
> columns(strColumns).Select
> Selection.EntireColumn.Hidden = True
> End Sub
>>578
> Sub HideColumns(strCcolumns As String)
> Columns(strColumns).EntireColumn.Hidden = True
> End Sub
上記は別スレの内容だけど
無駄であっても、
個々の内容が理解できていないと無理
そうでないと、ちょっと変えただけで???となるでしょ
最初のうちは、あえて無駄な行があってもいいと思うけどな
悪い事は言わん。手でコピペしとけ。
CellsとRangeも使えなくて出来るほど
VBAはガキのおもちゃじゃない。
これは君への皮肉じゃなく本心だ、>>213も同じように思って書いたんだと思うぞ
0222デフォルトの名無しさん
2006/08/02(水) 02:31:15ウザ
0223デフォルトの名無しさん
2006/08/02(水) 04:02:230224213
2006/08/02(水) 07:00:20どこが間違ってるか分からないと探しにくいだろうと思って
セル操作に関して間違っている箇所を上げておいただけなのですが…。
0226デフォルトの名無しさん
2006/08/02(水) 19:16:33A列の配列を並び替えたいのですが・・・
0227デフォルトの名無しさん
2006/08/02(水) 20:07:28逆に聞くけど、再帰使わない利点って何なの?
0228182
2006/08/02(水) 20:30:08184でマクロさらしてます。
0229デフォルトの名無しさん
2006/08/02(水) 20:54:42よく解らないということは、全く解らないわけでは無いんだな。
んじゃ、丸投げしないで出来てる部分だけ晒せ。話はそれからだ。
というか、コードを書くことだけに走らないで、まずはクイックソートの
アルゴリズムをきちんと理解しろ。
>>227
高速化だろ。Subプロシージャの呼び出しって結構遅い。Functionはもっと遅いけど。
あと、配列要素の上下限算出を盛り込める。
一般的にクイックソートは「配列, 配列要素下限,配列要素上限」などと3つの引数を渡すが
再起使わず内部ループにすると、プロシージャの頭で上下限算出すればいいから配列変数だけポンと渡せる。
>>228
さようなら。
0230デフォルトの名無しさん
2006/08/02(水) 21:18:01たぶんVBAでは無理なのでWin32APIを呼ぶ
0232デフォルトの名無しさん
2006/08/02(水) 21:54:54クイックソートでググればたくさんでてくるぞ
アルゴリズムが理解できないなら
VBのコードもあったからそれコピペすれば?
0234デフォルトの名無しさん
2006/08/03(木) 02:19:55生徒もやる気が無いけど、それ以上に教師にやる気が無くて困っています
頑張って、本に書いてある通りにプログラムを打ち込み、シューティングゲームを作ったんですけど、ありえないぐらいクソゲーで、もう自分の力ではどうしようも無い、ということを悟りました
ですので、どこか いいプログラム置いてある場所知りませんか?
邪道かもしれませんが、それをコピーして貼り付けよう思います
どなたかお願いします
0235デフォルトの名無しさん
2006/08/03(木) 13:13:55お前は。
0236デフォルトの名無しさん
2006/08/03(木) 19:42:100237デフォルトの名無しさん
2006/08/04(金) 09:09:28「お金払ってるんだから、きっちり教えて下さい(義務を果たして下さい)」とか言ってみたらどう?
まぁなかなか言いづらいけどさ。
親が払ってるのか自分で払ってるのか分からないけど
汗水流して得たお金払ってちゃんと教えてもらえないなんて、腹立たない?
0238デフォルトの名無しさん
2006/08/04(金) 09:30:55Workbooks.Add で新規作成したブックの
ThisWorkbook モジュールに、
Workbook_SheetChange 等のイベントを記述する方法を
どなたかご存じないでしょうか?
0239デフォルトの名無しさん
2006/08/04(金) 10:31:15ひんと:あたまをつかえ
0240238
2006/08/04(金) 10:47:43意外と簡単に実装できるってコトですか・・・?
まさか、
コードウインドウ開いて入力するとか、じゃないですよね?
Workbooks.Add したブックへ自動的にWorkbook_SheetChange 等のイベントを
挿入したいんですが・・・。
当たり前のことを聞いてたら申し訳ありません。
0241デフォルトの名無しさん
2006/08/04(金) 11:56:17わかった上で言ってるんなら是非とも教えて欲しい。
少なくとも簡単に実装できるものではないと思う
>>240
Addではなく、既にSheetchange等マクロが入ったファイルをコピーするのではダメか?
中のソースをいじらせる必要があるのか?
方法が思いつかないわけじゃないが、試した事がないからな。とりあえず>>239先生の回答を待ってみてくれ
0242238
2006/08/04(金) 12:45:40ファイルをコピーするのは思いついてはいるんですが、
一応、ブック単体での動作を予定しているので・・・。
VBとかみたいにリソースファイルを扱えるならよかったのですが・・・。
0243デフォルトの名無しさん
2006/08/04(金) 12:46:35それマクロウイルスの第一歩やん。
なんか設定変えれば使えるようになるはず↓
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbext98/html/vaobjCodePane.asp
ただ、>>241さんの方法(ブックコピペ)が可能ならそれが一番よいと思う。
0245243
2006/08/04(金) 13:13:33クラスモジュール使ってexcel全体のイベントをもらう事が事が可能なので
それを使ってみると言う手もあると思います。
実は私もこの作業を行おうと思っているところですんで詳しくは無いですが、
そう難しくも無いみたいですよ?
ttp://www.moug.net/skillup/opm/opm08-04.htm
ただ、追加したブックを「一人歩き」させたいならこの方法はダメですね。
0246238
2006/08/04(金) 13:45:32おお、その手がありましたか。
私のほうも追加したブックを独立させて動作する必要は無いので
参考になりそうです。
ありがとうございます!
0247デフォルトの名無しさん
2006/08/05(土) 00:02:40A列を並べ替えるならsortメソッドが最速じゃないか?
0248デフォルトの名無しさん
2006/08/05(土) 01:53:080249名無しさん@お腹いっぱい。
2006/08/05(土) 02:07:290250デフォルトの名無しさん
2006/08/05(土) 06:25:07VBAの本なんて星の数ほどあって
その中で自分の知ってる本はほんのわずか。
しかもどんどん新刊が出て入れ替わる。
とても特定の本をお薦めできる状態じゃないね。
一つの方法として、アマゾンのサイトで検索してみて
売れている純に表示させ、読者レビューを読んでみる
といいかも知れない。当てずっぽうで買うよりマシだろう。
0251デフォルトの名無しさん
2006/08/05(土) 08:17:370252デフォルトの名無しさん
2006/08/05(土) 13:37:28どんな言語でもそのような状況なのに、なぜお勧め本が存在するんだろう?
0253デフォルトの名無しさん
2006/08/05(土) 14:36:52難しすぎると感じたら、易しそうな本を買う。
易しそうなら、その本の内容を理解しつくして、難しそうな本を買う。
ちょっとだけ難しいなと思ったら、その本がたぶん正解。理解するまでがんばる。
以下繰り返し。
0254デフォルトの名無しさん
2006/08/05(土) 15:27:17言ってる意味が良く分からない
0255デフォルトの名無しさん
2006/08/05(土) 15:29:070256デフォルトの名無しさん
2006/08/05(土) 18:27:59簡単に言うと「面倒臭いから」
0257デフォルトの名無しさん
2006/08/06(日) 10:05:500258デフォルトの名無しさん
2006/08/06(日) 12:30:140259デフォルトの名無しさん
2006/08/06(日) 13:07:58/⌒ ⌒\ ング ング
/ (●) (●)\
/::::::⌒(__人__)⌒:::: \ チュパチュパ
| ( \ |
\_ ヽυ ::\ /
\ .:::\
0260デフォルトの名無しさん
2006/08/06(日) 13:30:22OLEのツールボックスの出し方さえわからないのです・・・orz
初心者プログラマにOLEは敷居がたかいのかな・・・
0261デフォルトの名無しさん
2006/08/06(日) 13:31:380262デフォルトの名無しさん
2006/08/06(日) 15:03:530263デフォルトの名無しさん
2006/08/06(日) 15:16:16ActiveCell.FormulaR1C1 = "nurupo"
もうあほかと。
0264デフォルトの名無しさん
2006/08/06(日) 17:39:24VBAでWordやExcelの操作をすることからしてOLEのおかげ。
0265デフォルトの名無しさん
2006/08/06(日) 18:24:44VBAとブラウザを連動させたかったのですが、
それはOLEで実現するのは間違いなのでしょうか?
02664歳の時、大好きなうどんが喉につまり窒息死 ◆naKANOoou.
2006/08/06(日) 19:04:01そんでそれをCSVに出力すると1になっちゃうのを0001のまま出力するにゃどうすりゃいいの?
1の書式を文字列にして0001にしても同じじゃんよ?
読み込みはTextFileColumnDataTypesでできたんだけど出力さっぱりわからん
0267デフォルトの名無しさん
2006/08/06(日) 19:07:19つーか、VBA(VB言語でMS Office Applicationを操作)の話ではなく
普通のVisual Basic(VB言語で汎用的な処理)の分野の話なので本スレでどうぞ。
このへんのやり方は、VBAでやるにしてもVBとやり方変わらないし。
0268デフォルトの名無しさん
2006/08/06(日) 19:33:11それこそVBAの分野だろ。
ワークブックのメソッドを使ってCSV保存するのなんてVBA使ってるとは言わん。
マクロの記録そのままでもいけるからな。
VBA使ってセルのデータを取得し、テキストに書き出す部分を自前で実装してこそ
VBAを使ってると言える。これなら値の取得を.Valueではなく、.Textにすることで
セルの値ではなくセルの表示結果が取得できる。
0269デフォルトの名無しさん
2006/08/06(日) 19:35:35ん?俺のExcel2000は
ゼロ付きのままcsv保存されるよ
どうやって保存してんの?
02704歳の時、大好きなうどんが喉につまり窒息死 ◆naKANOoou.
2006/08/06(日) 19:35:4102714歳の時、大好きなうどんが喉につまり窒息死 ◆naKANOoou.
2006/08/06(日) 19:41:29ホントだすげえびっくりした
02724歳の時、大好きなうどんが喉につまり窒息死 ◆naKANOoou.
2006/08/06(日) 19:58:170273デフォルトの名無しさん
2006/08/07(月) 21:29:23SUBとEND SUBの間にどう入力すればいいでしょうか。
0274デフォルトの名無しさん
2006/08/07(月) 21:37:070275デフォルトの名無しさん
2006/08/07(月) 21:53:48…………
End Sub
0276デフォルトの名無しさん
2006/08/08(火) 00:34:25Dim i As Integer, j As Integer, n As String, nn As String
Application.ScreenUpdating = False
i = Sheets.Count
n = ActiveWorkbook.Name
For j = 1 To i
Sheets(j).Copy
nn = ActiveSheet.Name
With ActiveWorkbook
.SaveAs "C:\My Documents\" & nn
.Close
End With
Next
Application.ScreenUpdating = True
End Sub
すみません。これが動かないのはなぜですか?
0277デフォルトの名無しさん
2006/08/08(火) 00:37:090278デフォルトの名無しさん
2006/08/08(火) 00:39:22はじめてVBAを使おうとしてます。。
明日会社で必要なの。だれか教えてください!
0279デフォルトの名無しさん
2006/08/08(火) 00:50:58nn = ActiveSheet.Name
↓
nn = Sheets(j).Name
0280デフォルトの名無しさん
2006/08/08(火) 01:13:05例えエラーになる式やコードでも、何をやりたいのかを的確に把握する手がかりになります。
その上で、どううまくいかないのかを具体的に書きましょう。
エラーが出るなら、何処でどういうエラーが出るのか、
想定外の結果が出るなら、条件と想定上の結果、実際の結果などを詳しく書いてください。
0281デフォルトの名無しさん
2006/08/08(火) 01:17:31パスがねえんだろ
おまいのマイドキュメントはホントにそこにあんのか?
0282デフォルトの名無しさん
2006/08/08(火) 06:43:12全くだな。
0283デフォルトの名無しさん
2006/08/08(火) 08:28:290284デフォルトの名無しさん
2006/08/08(火) 08:55:59Win98ならそこだろ。
0285デフォルトの名無しさん
2006/08/08(火) 12:25:42たぶんソレ
シート毎に分割して保存するならな
02864歳の時、大好きなうどんが喉につまり窒息死 ◆naKANOoou.
2006/08/08(火) 20:40:42回避する方法ある?
0287デフォルトの名無しさん
2006/08/08(火) 21:09:40うぉぉぉおぉ本当だ!!今まで気づかなかった。
スクロールバーが無いときを基準に右寄せしてるっぽいね。
消極的にいくと..全ての値の後に空白入れるとか、ラベルとSpinbuttonで擬似的に作るか..
0288287
2006/08/08(火) 21:22:1002894歳の時、大好きなうどんが喉につまり窒息死 ◆naKANOoou.
2006/08/08(火) 21:57:55文字列にして後ろに入れればいいんかな?
0290287
2006/08/08(火) 23:11:30色々試してみたけど、やはり Column.Count=2 で二列目に空白データぶち込んで
ColumnWidth = (リストボックスの幅-15) ; (10) に指定すると中々よい感じ。
なんだが、スクロールバーが出ない少ない量になると不自然な空白が現れる。
あと、環境によってスクロールバーのデカさが変わってくると....
0291デフォルトの名無しさん
2006/08/09(水) 01:48:09Public Const WM_CAP_START As Long = WM_USER
Public Const WM_CAP_FILE_SAVEDIBA = WM_CAP_START + 25
Private Declare Function SendMessageAsString Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Public Function capFileSaveDIB(ByVal hCapWnd As Long, ByVal FilePath As String) As Boolean
capFileSaveDIB = SendMessageAsString(hCapWnd, WM_CAP_FILE_SAVEDIBA, 0&, FilePath)
End Function
↑で、クリップボード中の画像をファイルにして保存したかったりするわけですが
FilePathを---\hoge.bmp にすると約800KBのファイルが出来ます
FilePathを---\hoge.jpg にしても約800KBのファイルが出来ます
これ、どうにかなりませんか
せめて1/5ぐらいのサイズになりませんか
どこかで見つけたDoodle2というDLL使うと
bmpとjpgではかなりサイズに差が出るんですけど、できればこのDoodle2使わずに。。。無理ですか?
0292デフォルトの名無しさん
2006/08/09(水) 03:48:13※文句は受け付けません。
Sub jpgsss()
Dim jaws As Chart
Set jaws = ThisWorkbook.Charts.Add
jaws.Paste
Debug.Print jaws.Export("c:\2ch.jpg", "jpg")
End Sub
0293デフォルトの名無しさん
2006/08/09(水) 04:38:48サイズは1/10ぐらいまで縮めることが出来ました
Debug.Print jaws.Export("c:\2ch.jpg", "jpg")
は
Debug.Print jaws.Export("c:\2ch.jpg", "jpeg")
ですよね
いや、そんなことはどうでもいいんですけど
このやり方は、まず貼りつけちゃうわけですよね
これってグラフ?
で、何というか、その。。。あ、いえ何でもないです
おやすみなさい
0295デフォルトの名無しさん
2006/08/09(水) 13:24:14アクティブになっているシートからグラフを作りたいんですが
どのようにすればいいですか?
とりあえず、ここまで作ったんですが、よろしくお願いします!
Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=Sheets("sheet1").Range("A1:G4354"), _
PlotBy:=xlColumns
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = "=sheet1!R2C1:R4354C1"
ActiveChart.SeriesCollection(1).Values = "=sheet1!R2C2:R4354C2"
ActiveChart.SeriesCollection(1).name = "=""系列1"""
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "HD"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "xxxxx"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "yyyyy"
End With
0296デフォルトの名無しさん
2006/08/09(水) 13:58:58つ マクロの記録
0297295
2006/08/09(水) 14:22:29助けてください
0298デフォルトの名無しさん
2006/08/09(水) 14:26:06マクロの記録ができないんだったら、それはマクロでは書けないという事じゃないかな。
0299デフォルトの名無しさん
2006/08/09(水) 14:44:570300292
2006/08/09(水) 14:58:07にしてActiveChart.SetSourceData Source:=Sheets("sheet1").とかの
sheets("sheet1")の部分を「なんちゃら」に変えてやればよし。
しかしまず、「ActiveChart」という表現を使うのはやめたほうが吉だと思う
0301295
2006/08/09(水) 15:25:39ActiveChart以外の作り方があったら教えてください!
0302デフォルトの名無しさん
2006/08/09(水) 17:00:49それくらい類推してくれ。「active」で苦しむのを身をもって体感したばかりだろ?
chartも同じように set どーたらこーたら = charts.add
としてあげて、あとは全部withブロックで囲むとか。
03034歳の時、大好きなうどんが喉につまり窒息死 ◇naKANOoou.
2006/08/11(金) 11:49:270304デフォルトの名無しさん
2006/08/11(金) 12:13:45>>286 どうなりましたか?
03054歳の時、大好きなうどんが喉につまり窒息死 ◇naKANOoou.
2006/08/11(金) 12:46:46値が入ってない列入れてもその列無視された
0306デフォルトの名無しさん
2006/08/11(金) 13:04:050307デフォルトの名無しさん
2006/08/11(金) 21:23:110308デフォルトの名無しさん
2006/08/12(土) 00:50:35その領域の記述法をご教授いただけないでしょうか?
マクロの記録から、Range("B3:B11,D3:D11") のように、二つの列(例えばB列とD列)をコンマで区切れば
良いことはわかったのですが、これを「3 行から 11 行」のように固定ではなく、
変数Nを用いて「3 行から N 列」のように可変にしたいのです。
0309308
2006/08/12(土) 00:56:340310デフォルトの名無しさん
2006/08/12(土) 01:00:500311デフォルトの名無しさん
2006/08/12(土) 01:14:50union(range, range)
0313デフォルトの名無しさん
2006/08/12(土) 10:16:28Microsoft Visual Basic 2005 Express Editionで参照にexcelを追加すれば簡単に行けそうですか?
自分はvbaは少し経験があります。vbaの参考書籍もあるので似たようなものなら挑戦してみたいのです。
0314デフォルトの名無しさん
2006/08/12(土) 11:58:08Excelオブジェクトのメソッドなどは使えるようになるが、
VBAと互換性のあるVB6以前と、VB.NET 2002〜2005は基本的な構文規則の部分が違うので
VB2005でVBAのコードそのままでは動かないことが多い。VBAのコードそのまま使いたければVisual Basic 6.0を買え。
完全互換ではないので構文的にVB6→VBAで動かない部分はあるが、VBA→VB6で動かない部分はほとんど無いだろ。
0315デフォルトの名無しさん
2006/08/12(土) 18:20:57難しいのですね。
vb6は手にはいらないと思うので2005でがんばります。
ありがとうございました。
0316デフォルトの名無しさん
2006/08/12(土) 18:22:47同じ動作のプログラムを作り直す気があるのならその組み合わせでも行けると思う。
但し、同じ動作の(似たようなロジックを持つ)別のプログラムになることは間違いない。
0317デフォルトの名無しさん
2006/08/13(日) 16:47:07セルの値が刻々と自動で変化するようになっています。
一つのセルだけに注目して、そのセルの値が変わった時にだけ発生するイベントとかありませんか?
あるいはそれを実現する為の裏道とか知ってらっしゃる方がいたらお教え願います。
特定のセルの値が変わったらソースを実行したいと思っています。
他のセルの値も変化しますが、それにはひっかからないようにならないかと考えています。
よろしくお願いします。
0318デフォルトの名無しさん
2006/08/13(日) 17:10:04Worksheet_Change
If Target
他のセルの値が変わってもイベントが発生すると言うかも知れないが、
何故このイベントにByVal Target As Rangeという引数があるのか考えてみよう。
もし、Worksheet_A1_Change〜Worksheet_IV65536_Changeなんて感じで
Changeだけで16777216個ものイベントが有ったらたまったものじゃないだろ。
しかも2007では更に・・・
それに例え16777216個のイベントを用意したとしても、
Worksheet_Changeイベントを起こしてから、Targetで条件分岐するか
条件分岐してからWorksheet_***_Changeを起こすかの違いで
対象以外のセルの値変更で内部イベントが起きることには変わりない。
ただそれが見えるか見えないかの違いだけ。
こういう引数のあるイベントってのは、ユーザーの見えない弄れないところで条件分岐させるより
ユーザーが見て弄れるところで条件分岐させた方が効率よいから、条件を引数にしてるだけであって
見えないからってその処理をしていないわけじゃないから、
見えなくなったから効率が良くなる処理が早くなるってわけじゃない。
つまり君の望むような物があったとしても、引っかからないのではなく引っかかってるのが見えないだけだ。
ClassでEvent、WithEventsなんかを使うようになると解ると思う。
0319デフォルトの名無しさん
2006/08/13(日) 18:53:19Public Declare Function WritePrivateProfileString Lib "kernel32" _
Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpString As Any, _
ByVal lpFileName As String) As Long
iniファイルをあれこれいじるために調べていたらこういうのが見つかった
んですけど、ここでAsの後に出てくるAny というのは一体どういうものなん
でしょうか?
0320デフォルトの名無しさん
2006/08/13(日) 19:17:06Sheet1.Cells(i,j) = 値
のようにしているのですが、データ数が数千に及ぶようになるとセルの記入に時間がかかってしまいます。
これを高速化する方法はないでしょうか?
例えば、データの配列を用意しておいて、それをFor 文で一つ一つ書き込むのではなく、
まとめて Cell に突っ込むような方法があれば、高速描画できそうな印象があるのですが、
そのような手法はないでしょうか?
0321デフォルトの名無しさん
2006/08/13(日) 19:18:59range = array
0322デフォルトの名無しさん
2006/08/13(日) 19:20:01screenupdatingをfalseにして、描画後trueに。
0323デフォルトの名無しさん
2006/08/13(日) 20:38:10ありがとうございました。高速になりました。
0324デフォルトの名無しさん
2006/08/13(日) 20:43:51range(cells(1,5),cells(5,5)) = split("1,2,3,4,5",",")
としてもすべてのセルに1番目の要素が入ってしまうのですが、どうすればよいでしょう。
0325321
2006/08/13(日) 21:09:13ちょっとVBAから遠ざかっているので、回答ズバリのコードがか書けなくてすまん。
range = arrayの場合、双方とも二次元配列として捕らえられる。
arrayが一次元配列の場合は、横方向のrangeにはそのまま設定できるが、
縦方向のセルの場合は、arrayの最初の要素だけが設定される。
縦方向に繰り返し設定されるのは、range("A1:A5") = 10などとしたときに、
全てのセルに10が設定されるのと同じ理屈。
イミディエイトペインで
a = range("A1:C2").Value
range("B4:D5") = a
としてみると、お互い二次元であれば正しく動くことが確認できるはず。
ただし、俺はその「a」を、VBAでどう書くのかは忘れてしまった・・・。
なんか簡単に書けた気もするのだが・・・。
0326デフォルトの名無しさん
2006/08/14(月) 00:42:57【1 OSの種類】 WindowsXP
【2 Excelのバージョン】Excel2000
COMアドインでDLL作ったのですが、使い方がわかりません。
新規アドインの標準モジュールに
Sub hyouji()
Msgbox "メッセージボックス"
EndSub
のコードを書いてDLLを作りました。どうすればエクセルの別のブックか
ら「hyouji」を呼べるのでしょうか?
DLL作っただけです。設定とかも教えてください。よろしくお願いします。
0327デフォルトの名無しさん
2006/08/14(月) 01:44:47素のExcel2000でCOMアドインが作成できました?
Officeデベロッパーぢゃありませんでしたっけ。
まっ私は Officeデベロッパーを使った事が無いのでお手伝い出来ませんが。
0328デフォルトの名無しさん
2006/08/14(月) 02:00:44二次元配列をセルに転記するなら
Option Base 1
Dim mdate(4, 2) As Integer
Range(Cells(1, 1), Cells(4, 2)).Value = mdate
で、まとめて入力できるよ。
0329デフォルトの名無しさん
2006/08/14(月) 11:57:41とても興味深いレスありがとうございます。
一つづつ調べて頑張ってみます☆
0330デフォルトの名無しさん
2006/08/16(水) 04:03:370331デフォルトの名無しさん
2006/08/16(水) 04:30:440332デフォルトの名無しさん
2006/08/16(水) 04:38:42WinInet
>>331
?
0333デフォルトの名無しさん
2006/08/16(水) 06:38:30ありがとうございます。
検索したらVBAによるTCP/IPプログラミング入門の本がありましたので勉強してみます。
サンプルがどこかにあれば参考にしたいなと思ったけどないですよね?
0334デフォルトの名無しさん
2006/08/16(水) 08:20:55WinInetはそんなTCP/IPの世界より高レベルだから、
直接的にその本が役に立つかは微妙。知っておいて損はないだろうけど。
WinInetくらいググればサンプルはきっと見つかると思う。
0335デフォルトの名無しさん
2006/08/19(土) 19:26:340336デフォルトの名無しさん
2006/08/20(日) 19:13:47どうしてでしょうか?
0337デフォルトの名無しさん
2006/08/20(日) 20:28:42見入力判定はlenを使うと言いよ。
0338デフォルトの名無しさん
2006/08/20(日) 20:43:30一致するからだよ。
試しにワークシートで空セルを参照する式(=A1とか)書いてみな。0が返るから。
Excelの空セルは、厳密には""でも0でもないが、""にも0にも一致する。
0340デフォルトの名無しさん
2006/08/20(日) 21:11:54A1 = 1
B1 = Empty
C1 = =A1+B1
0341デフォルトの名無しさん
2006/08/21(月) 09:41:01べつの言語と考えたほうがいいんでしょうか?
VBの本を買ってきてそのコードをExcelとかに付属の
VBE上で実行すると実行できちゃうもんですか?
たとえばカレンダーアプリみたいなもの。
0342デフォルトの名無しさん
2006/08/21(月) 10:29:55厳密には違うけど、セルはVariant型の変数だと思って扱うといいよ。
得られる文字数に制限あるけど文字列として扱いたいなら.Textプロパティを使うとか‥‥
0343デフォルトの名無しさん
2006/08/21(月) 10:42:41VBには多機能なFormがあるけどExcelVBAには強力無比なスプレッドシートがある。
GUI周りは互換性がないが、演算だけならVBAへの移植は難しくない。
#同じ言語だが使い方が違うと思えばいい。例えばセールストークと演説は全然違う。
0344デフォルトの名無しさん
2006/08/21(月) 21:45:540345デフォルトの名無しさん
2006/08/21(月) 21:51:17VBに慣れてる人には、不満だらけだろうな。
0346デフォルトの名無しさん
2006/08/21(月) 22:02:470347デフォルトの名無しさん
2006/08/21(月) 22:04:10ジャパネットたかたと選挙演説の違いがよく分かりません。
0348デフォルトの名無しさん
2006/08/22(火) 02:23:50VB6で作ろうが、VBAで作ろうが、例えば簡易ストップウォッチならそっくりになるってこった。
0349デフォルトの名無しさん
2006/08/22(火) 17:23:46よろしくお願いします
cells(1, 2)には式が入っていて計算の結果に寄って#NUM!となってしまう場合があります
このときに
if cells(1, 2)>0 then
などとif文を使ったりするとエラーがでて止まってしまいます。
これを回避するために「cells(1, 2)が#NUM!の場合」というif文を入れたいのですが
なんて書けばいいのですか?
初歩的な事だと思うんですがわからないので教えてください。
0350デフォルトの名無しさん
2006/08/22(火) 19:45:02こんなんあった
0351名無しさん@そうだ選挙にいこう
2006/08/22(火) 21:01:140352デフォルトの名無しさん
2006/08/22(火) 23:22:24普通にエラートラップではダメなの?
0354デフォルトの名無しさん
2006/08/23(水) 15:18:23エクセル上で��Ctrl+F�≠ナ検索ウインドウが開きますが、
VBAで起動させる際は、subとEnd subの間になんと書き込めばいいでしょうか。
よろしくお願いいたします。
0355デフォルトの名無しさん
2006/08/23(水) 16:17:070356デフォルトの名無しさん
2006/08/24(木) 14:06:26ありがとう御座います。
このVBAをコマンドボタンにて起動させ様ようと、
下記の通り作成しましたが、反応がありません。
想定出来る原因はわかりますでしょうか。
また、コマンドボタンで検索を実行させる模範例をご教授して頂ければ助かります。
Private Sub CommandButton1_Click()
SendKeys "^(f)"
End Sub
0357デフォルトの名無しさん
2006/08/24(木) 15:44:29原因:フォーカスがシート上に無いから。
0358デフォルトの名無しさん
2006/08/24(木) 16:41:03初心者ですいません、フォーカスが解りません。
具体的にどうすればよろしいでしょうか。
0359デフォルトの名無しさん
2006/08/24(木) 17:21:32そのセルの上クリックしたら枠が太くなるじゃん
その状態を、シートのセルにフォーカスした、と言うんだと。
0360デフォルトの名無しさん
2006/08/24(木) 17:33:44ツールバーに検索ボタンを登録してみては?
ツール→ユーザー設定→コマンドタブ→編集→検索ボタンをツールバーにドラッグ
0361デフォルトの名無しさん
2006/08/24(木) 18:03:48>>359
ありがとうございます。理解しました。
VBAで検索機能をもたせたコマンドボタンを、エクセルシート上に保存して、
メール添付して相手に送りたいのです。
相手側で開いたときにうまく機能しないのですが対策が解りません。
0362デフォルトの名無しさん
2006/08/24(木) 18:25:540363デフォルトの名無しさん
2006/08/24(木) 19:01:16相手に連絡をし、マクロのセキュリティレベルは「低」にしましたがダメでした。
0364デフォルトの名無しさん
2006/08/24(木) 19:07:11「低」って・・・
おまい、ひどいやつだな・・・
0365355
2006/08/24(木) 19:10:32フォーカスがセルにある状態で"Ctrl+F"出来ればいいんだろ?
いんちきくさいけどこれでできるかな?
Private Sub CommandButton1_Click()
ActiveCell.Activate
Application.Wait (Now + TimeValue("00:00:01"))
SendKeys "^(f)"
End Sub
VBA的に正しいかどうかは不明
0366357
2006/08/24(木) 19:36:48findメソッド使うって手はどうかな?
0367デフォルトの名無しさん
2006/08/25(金) 02:36:27Function kannsuu(N)
Worksheets("1").Cells(1, 2) = Worksheets("1").Cells(1, 1)
End Function
としても途中で処理が止まってしまいます。
止まる理由もわからず、したい事もできず困っています。
実現する方法を教えて下さい。
0368デフォルトの名無しさん
2006/08/25(金) 03:12:470369デフォルトの名無しさん
2006/08/25(金) 04:40:21ユーザーフォームに登録すると動かないんだろう?
0370デフォルトの名無しさん
2006/08/25(金) 07:53:10Application.ScreenUpdating = False
Application.Wait (Now + TimeValue("00:00:01"))
Application.CommandBars(1).Controls(2).Execute
Application.CommandBars(1).Controls(2).Controls(14).SetFocus
SendKeys "{ENTER}", True
Application.ScreenUpdating = True
End Sub
0371370
2006/08/25(金) 08:39:42Private Sub CommandButton1_Click()
Application.CommandBars(1).Controls(2).Controls(14).Execute
End Sub
0372デフォルトの名無しさん
2006/08/25(金) 08:41:510373デフォルトの名無しさん
2006/08/25(金) 08:59:13XlBuiltInDialog のメンバ のものが ダイアログ表示のための定数
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vbaxl11/html/xlhowConstants.asp
オブジェクトブラウザからも探せますね
0374デフォルトの名無しさん
2006/08/25(金) 09:36:05>ユーザーフォームに登録すると動かないんだろう?
動くんじゃね?ターゲットとなる対象が間違ってるんじゃね?
Private Sub CommandButton1_Click()
SendKeys "{TAB}"
End Sub
これならユーザーフォームではなくてCommandButton1に対してTABキーを送ってるのよ
0375デフォルトの名無しさん
2006/08/25(金) 09:47:40これ実行した後だと"Ctrl+F"が実行できなくならない?なんでだろ
0376デフォルトの名無しさん
2006/08/25(金) 09:59:35閲覧者が複数でひとつのアドレスを共有している場合、個別に閲覧確認する良い
方法はありませんでしょうか。
パソコン使えない方が多いので、個別にアドレスを設定する事が出来ません。
例えば添付ファイルにエクセル貼り付けて、VBA使用して個別の名前のコマンドボタンクリックすれば
閲覧情報が返って来る様なプログラムは出来るのでしょうか。
0377370
2006/08/25(金) 10:00:27369をみてユーザーフォームからSendKeysが効かないのであれこれしてただけなんで。
むりやりSendKeys "{ENTER}", Trueで効くじゃんと思ったが無駄だなぁと省いたら
Application.CommandBars(1).Controls(2).Controls(14).Executeだけに。
それなら
Application.Dialogs(xlDialogFormulaFind).Showでいいわけなので結果無意味だったかな
まぁ、SendKeysだけでフォームから動作できなかったわけだが。
これのSetFocusのあとだから効いたの?
Application.CommandBars(1).Controls(2).Controls(14).SetFocus
SendKeys "{ENTER}", True
0378デフォルトの名無しさん
2006/08/25(金) 10:01:02outlookを使用しています。
0380デフォルトの名無しさん
2006/08/25(金) 20:41:03シート名と言うと、上の例だと1ですよね。
色々変えてみたのですが、やはり処理が途中で止まってしまいます。
関数だと他のセルの操作ができないのかな〜
誰か助けて下さい〜
0381デフォルトの名無しさん
2006/08/25(金) 20:53:140382デフォルトの名無しさん
2006/08/25(金) 21:40:010383デフォルトの名無しさん
2006/08/25(金) 21:52:44>>367は関数じゃない。
0384デフォルトの名無しさん
2006/08/25(金) 22:29:04全然話についていけないのですが、関数では無いとはどう言う事でしょうか?
関数では無いからエラーになるまではわかるのですが、関数の定義と言うか、どこがおかしいのかがわかりません。
何がいけないのか教えてもらえないでしょうか。
0385デフォルトの名無しさん
2006/08/25(金) 22:53:17日本語が分からない人に日本史を教えるような難しいことはできん。
とりあえずまず、なぜ「自作関数」が必要なのか教えてくれ。
0386デフォルトの名無しさん
2006/08/25(金) 23:34:35まず何がしたいのかがよく分からない。
Functionは値を渡し、Function内で処理をして値を返す物です。
0387デフォルトの名無しさん
2006/08/25(金) 23:38:47刻々と値の変化するセルが300個ほどあります。
特定のセルが変化した時にだけ処理を行いたいと思っています。
それを実現するには自前の関数を作ればいいと教えてもらってのでやってみました。
ただ、その処理と言うのが他のセルに値を貼り付けるとまでは説明していませんでした。
関数では他のセルに値を貼り付ける事はできないようなので、素直にイベントでやってみます。
負荷を少しでも軽くする抜け道がないかと思ったのですが。
0388デフォルトの名無しさん
2006/08/25(金) 23:44:23なるほど。
関数の意味がわかりました。
ありがとうございます。
0389デフォルトの名無しさん
2006/08/25(金) 23:53:270390デフォルトの名無しさん
2006/08/26(土) 00:00:255回読み返してやっと意味が6割くらい理解できた。
ワークシート関数から呼び出すからといって処理が軽くなるわけじゃないので、
イベントでやるのが正解(=後で処理しやすい)だと思う。
>>389
Webクエリとかじゃね?
0391デフォルトの名無しさん
2006/08/26(土) 00:08:34>>390
RSSだろ(知らんヤツにはわからん)
0392デフォルトの名無しさん
2006/08/26(土) 00:09:54証券会社から株価のデータをリアルタイムで受け取っています。
リアルタイムスプレッドシートって事くらいしかわかりません。
0393デフォルトの名無しさん
2006/08/26(土) 00:10:01漢字やひらがなを使った方がコードが非常にわかりやすくなると思いますが。
途中で入力を切り替えなければいけない煩わしさを補って余りあると
思います。
0394デフォルトの名無しさん
2006/08/26(土) 00:18:16説明が下手ですいません。
株の取引上、最速が必要でした。
イベントだと1秒に100回は処理する事になるので。。。
0395デフォルトの名無しさん
2006/08/26(土) 00:22:43会社だと英語表示じゃないと困る事がある。
一つのシステムを複数の会社で作るとき自社だけ漢字を使うわけにはいかない。
0396デフォルトの名無しさん
2006/08/26(土) 00:36:110397デフォルトの名無しさん
2006/08/26(土) 00:42:56もっともらしいことを言えば、直接入力できない煩わしさの方が
利便性より上回ると多くの人が考えているのだろうとか、
英語はプログラマの共通語だと格好づけるなどといったところかな。
0398デフォルトの名無しさん
2006/08/26(土) 00:55:18VBやってる人は他の言語もできるので、その言語に合わせてるとか。
0399デフォルトの名無しさん
2006/08/26(土) 00:56:01なってんじゃねーか?
0400デフォルトの名無しさん
2006/08/26(土) 01:03:01普段Cでもプログラム書いてるので英数で書くのが普通。
一度実験で日本語込みで書いた事あるけどコメントと区別がつかなくて読みにくかった(例:[txt問題番号]みたいな書き方の場合)
色でも区別を付けてるんだけど、やっぱり日本語はコメント文に見える。
あと、日本語で書くと色々うるさい奴がいる可能性があるので英数で書いておくのが無難ってのもある
VB,VBAはIDEが優秀だから日本語でもいいんだけどね、個人的には
0401デフォルトの名無しさん
2006/08/26(土) 05:18:24「"貸方"をセルに代入しようとしているんですがエラーになっちゃいますぅ」
「あれだ、"貸し方"って変換してりゃぁそりゃエラーにもなるだろ」
0402デフォルトの名無しさん
2006/08/26(土) 06:55:32それはスペルミスと同じレベルの問題で漢字特有って程じゃない。
それに人為的ミスがあって不都合が発生するのは当然。
スペルミスも誤変換も、インテリセンスと変数宣言の強制という同じ方法で防げるし。
0403デフォルトの名無しさん
2006/08/26(土) 09:03:32確かになぁそうだな。「0」「o」「O」、「1」「l」で同じことが言えるかもしれないし。
ただ、やはり他人の書いたコードに2バイト文字の変数があると身構えてしまう。
0404デフォルトの名無しさん
2006/08/26(土) 21:16:42このたびエクセルVBAをフロントに使った大きめのシステムをつくることになりました。
WebアプリではRubyのRailsやJavaのSpringなどフレームワークが流行ってますが
VBAではそういった開発に役立つようなフレームワークってありますか?
VBAunitは使ってみようと思っていますが。
0405デフォルトの名無しさん
2006/08/27(日) 05:05:09だからこそVB含めて、ここまで初心者の間に広まった。
0406404
2006/08/27(日) 17:49:12> VBAという言語自体がフレームワークなんだが。
> だからこそVB含めて、ここまで初心者の間に広まった。
なるほど。
だけど複数人で開発とかになるとちょっとつらいですね。
0407デフォルトの名無しさん
2006/08/27(日) 19:33:46Excelの場合多彩な機能を片っ端から無効化していく作業が必要だな。
0408デフォルトの名無しさん
2006/08/27(日) 20:37:500409デフォルトの名無しさん
2006/08/28(月) 15:37:24日本語使うと誤変換よりも送り仮名等でコードの内容を、口頭で伝えるときに不便なのかも‥
一人で開発するには問題ないけどね
0410デフォルトの名無しさん
2006/08/31(木) 10:29:390411デフォルトの名無しさん
2006/09/01(金) 00:24:37FileDialogオブジェクトを使おうとしたら、「ユーザー定義型は定義されていません」
というコンパイルエラーになりました。
参照定義には、Microsoft Office 9.0 Object Libraryがちゃんとチェックされています。
FIleDialogを使うにはオブジェクトライブラリの10.0以上が必要なんでしょうか?
0412デフォルトの名無しさん
2006/09/01(金) 00:47:23この方法はどうやらWindowsXPでなければ使えないということが分かりました。
http://www.microsoft.com/japan/technet/scriptcenter/resources/officetips/aug05/tips0825.mspx
0413デフォルトの名無しさん
2006/09/01(金) 01:16:030414デフォルトの名無しさん
2006/09/04(月) 22:21:18VBAにて計算処理をして、Ctrl+Vで変数の値を貼り付けれるようにできませんか?
よろしくお願いします。
0415デフォルトの名無しさん
2006/09/04(月) 22:37:21マクロをキーボードに割り当てればいいよw
0416デフォルトの名無しさん
2006/09/04(月) 22:43:32とりあえずドコカのセルにぶち込んでCUTするとかじゃだめ?
0417414
2006/09/05(火) 18:47:09変数の値を一度セルにいれてからコピーし、
Ctrl+Vで貼り付けするとコピー元の書式や属性も張り付いてしまいますよね。
値だけペーストしたいのです。
形式を選択して貼り付けで値だけ貼り付けが可能なのは存じております。
Ctrl+Vでそれをできないものかと思いまして。
0418デフォルトの名無しさん
2006/09/05(火) 22:45:56VBAで計算するのになぜCtrl+Vが出てくるのかが分からん。
何をしたいのかもっと詳しく。
0419デフォルトの名無しさん
2006/09/06(水) 00:12:27APIの話になってくるからVBスレで聞いたほうがいいかも?
0420デフォルトの名無しさん
2006/09/06(水) 01:07:27頭が固いんだよ
Ctrl+Vを頭から消せ!
マクロを右クリにでも割り当てろよ
0421デフォルトの名無しさん
2006/09/06(水) 01:23:080422デフォルトの名無しさん
2006/09/06(水) 01:30:52418と同じ感想を持った。計算結果の変数:answerをそのまま、マクロで
目的のセルに代入すれば、Ctrl+Vは必要ない。 例:Range("A1").Value = answer
>Ctrl+Vで貼り付けするとコピー元の書式や属性も張り付いてしまいますよね。
コピー元が無設定のセルなら、書式、属性はコピー先が優先される。
Ctrl+Vも結果として、【形式を選択して貼り付けで値だけ貼り付け】と同じになる。
だから、計算結果の変数を無設定のセルに代入後、コピペすればいい。
VBAで求めた計算結果をそのまま、クリップボードに転送する簡単な命令はエクセルの
VBAにはない。代替方法として、APIを呼び出す方法やDataObject オブジェクトの
PutInClipboard メソッドを使う方法がある。しかし、416のようにセルを使い、
その操作をマクロで再現するのが、簡明である。
Ctrl+V の所作に関して。Ctrl+V にマクロを割り付けることは可能であるが、推奨しない。
標準の挙動を変えるとミスの元になるし、その操作になれると他のシートで勘違いを起こすから。
【形式を選択して貼り付けで値だけ貼り付け】をワンタッチでしたいなら、下記のマクロに
(キーは参考例)Ctrl+ALT+V を割り付ければいいだろう。
Sub Macro1()
ActiveCell.PasteSpecial Paste:=xlValues
End Sub
0423デフォルトの名無しさん
2006/09/06(水) 01:36:570424414
2006/09/06(水) 19:22:07仕事で私が使用している製品別計算処理のVBAの結果データ(数字)を使用したいと
職場のおじいさんにいわれたのですが
パソコン(エクセル)の扱いになれておらず、貼り付けたら書式設定が変になったから元に戻してくれといわれ
形式指定の貼り付けを教えても、間違えてしまい難しいといわれました。
おしいさんの使うエクセルのファイル名も貼り付けるセルの位置も不確定だったので
値だけコピーできれば単純に貼り付けでうまくいけないかと考えておりました。
Ctrl+Vにこだわったのは、この動作は右クリック貼り付けより使いやすいといわれたので・・・すみません。
私の方の処理結果を出力しているセルは固定なので、そこに値だけコピーできるボタンを作ってあげられればと思いました。
これからみなさんが教えてくださったことを調べて試してみます。
本当にありがとうございます。
0425デフォルトの名無しさん
2006/09/06(水) 20:55:17マイ関数作って、イベントかなんかで割り当てするの?
ExcelVBA中級くらいのスペックのつもり。
でもやったことないからわからん。
0426デフォルトの名無しさん
2006/09/07(木) 00:08:49マクロの割り当て方法がいろいろ書いてあるよ。
0427デフォルトの名無しさん
2006/09/07(木) 00:28:31> でもやったことないからわからん。
> でもやったことないからわからん。
> でもやったことないからわからん。
> でもやったことないからわからん。
0428デフォルトの名無しさん
2006/09/07(木) 01:09:09実は初心者の方が一発で分かるって話だな。
とりあえず「マクロの記録」の画面出してみろ。
0429デフォルトの名無しさん
2006/09/07(木) 05:24:33疑問を持つことは悪くない。上級者だって知らないことはある。
俺だって数年前にオマエと同じ疑問を抱いた。しかし速攻で調べて速攻で自己解決出来た。
他の知識が豊富なら、キーマクロの割り当て方を知らずに中級者を名乗るのはいいとしても
キーマクロの割り当て方すら自分で調べられずに中級者を名乗るのは烏滸がましいにも程がある。
ヘルプに書いてあることを自分で調べられるようになって初めて初心者。
ヘルプに書いてないことを、応用で導き出せるようになると、そろそろ初心者も卒業。
そしてあとは、その導き出した物の出来で中級者以上へと昇格する。
初心者とは一人前の下っ端のことを指す。自分のケツも自分で拭けないうちは半人前で初心者以下。
つまり君はまだ初心者にも満たない「入門者」だな。早く門を潜り終えて、初心者の位置に立とう。
0430デフォルトの名無しさん
2006/09/07(木) 12:06:02他人に説教するようになったらご隠居です。
0431414
2006/09/07(木) 18:48:03下記のようにやりました。ユーザフォームは非表示でテキストボックスだけつけてあります。
form.TextBox.Value = Cells(x,y).Value
form.TextBox.SelStart = 0
form.TextBox.SelLength = form.TextBox.TextLength
form.TextBox.Copy
0432デフォルトの名無しさん
2006/09/07(木) 21:45:59ご隠居さん、こんにちは。
0433デフォルトの名無しさん
2006/09/07(木) 23:13:07Sub Macro1()
' Keyboard Shortcut: Ctrl+v
'
Dim x As Variant
x = Cells(1, 1).Value
ActiveCell.Value = x
End Sub
ツール→マクロ→オプション→ショートカットキーで
Ctrl+vに登録すれば良いと思う
違うとこで利用したい、クリップボードに取り込みたいなら
Private Sub Workbook_Open()
Dim n As Variant, CB As New DataObject
x = Cells(1, 1).Value
CB.SetText x
CB.PutInClipboard
End Sub
で出来ました。
参照設定でMicrosoft Forms 2.0 Object Libraryが必要です
userformを挿入すると自動的に参照設定されます
0434デフォルトの名無しさん
2006/09/08(金) 13:09:54そこで現在の参照範囲を取得するために自動記録してみたところ
ActiveChart.SeriesCollection(1).XValues = "A1:A5"
のようになっていましたので
aaa = ActiveChart.SeriesCollection(1).XValues
としたのですが、この後、
bbb = aaa.Address
としても「型が一致しません」と出て代入できません。
(この時、VBAE上でaaaにカーソルを合わせても何も表示されません)
XValuesの値を取得するにはどうすればよいのでしょうか。
よろしくお願いします。
0435デフォルトの名無しさん
2006/09/08(金) 13:45:580437デフォルトの名無しさん
2006/09/09(土) 19:15:16aaaってRange型なの?
Range型なら、Setステートメント使わないとだよね?
Range型じゃないとしたら、Addressプロパティを使うのはおかしいよね??
0438デフォルトの名無しさん
2006/09/10(日) 15:01:03リンクしたテーブルを一時格納して別のテーブルに追加する方法を教えてください!
CurrentDb.Execute "DELETE * FROM テーブル;"
CurrentDb.Execute "SELECT aaa,bbb,ccc FROM リンクしたテーブル into Dim??"(ここが分からない)
CurrentDb.Execute "INSERT INTO テーブル (aaa,bbb,ccc) values('格納した数値','〃','〃')"
SELECTで抽出されるレコードは複数です。
複数一気に入れて、一気に別のテーブルに入れる方法を教えてください。
(形式・桁数を変えないといけないので、一時的に変数に格納します。)
0439デフォルトの名無しさん
2006/09/10(日) 15:54:05あとは、INSERT
どうすれば良い?
大至急
0440デフォルトの名無しさん
2006/09/10(日) 17:40:480441デフォルトの名無しさん
2006/09/11(月) 22:57:58ほとんどマクロ登録で作ったので、何かの参考になればと思い晒します。
使い方は冒頭に書いたつもりです。
ブラウザで文字化けする時はエンコードをシフトJISにしてみてください。
http://ryoma3.hp.infoseek.co.jp/J2/Module1.txt
0442デフォルトの名無しさん
2006/09/12(火) 09:45:300443デフォルトの名無しさん
2006/09/12(火) 12:19:15詳しく
0444442じゃないけど
2006/09/12(火) 15:24:27.selectが一杯ナところとか、
Caseとかをchr()とかでまとめたりできる、ってのをいいたいんじゃないのかな?
あと、Sub Init()とかすごいし。
まぁ、でもマクロ登録で作ったって自分で言ってるんだから、ねぇ?
0445デフォルトの名無しさん
2006/09/12(火) 15:52:56使用OS:Windows XP、Excel2003です。
Sheet1の5行目以降1行おき1列目に値が入力されています。
Sheet2は伝票のフォーマットです。
Sheet1の値をSheet2のE10にコピーして、
それを各行の値ごとに新しいシート
(たとえばsheet1の5行目はsheet3に)
sheet1が空白行になるまで出力し続けたいと思っています。
以下のように書いたのですが、
実行時エラー1004:アプリケーション定義またはオブジェクト定義のエラーと出てきます。
どなたかお願いします。
Sub Format()
Dim NewWorkSheet As Worksheet
i = 0
k = i / 2 + 3
Do Until IsEmpty(Worksheets("Sheet1").Range("A9").Offset(i, 0).Value)
Set NewWorkSheet = Worksheets.Add()
NewWorkSheet.Name = "Sheet" & k
Worksheets("sheet2").Copy Destination:=Worksheets("Sheet" & k)
Worksheets("sheet1").Cells(i, 1).Copy Destination:=Worksheets("Sheet" & k).Range("E10")
i = i + 2
k = k + 1
Loop
End Sub
0446デフォルトの名無しさん
2006/09/12(火) 16:04:09Sheet1の5行目以降じゃなくて9行目でした。
0447デフォルトの名無しさん
2006/09/12(火) 17:06:59すげーイライラするコードだなw
見る気がしない。ただ、ザッと見たとこ
Worksheets("sheet1").Cells(i, 1).Copy Destination:=Worksheets("Sheet" & k).Range("E10")
これ一発目の時(0,1)参照しちゃってるんじゃないの?
0448デフォルトの名無しさん
2006/09/12(火) 17:12:32複数行無視する場合はどうすればいいでしょうか?
Cでいう{ }に該当する機能はないでしょうか?
0449デフォルトの名無しさん
2006/09/12(火) 17:24:190450デフォルトの名無しさん
2006/09/12(火) 17:26:46VB関連の言語(VB4,5,6、VBA、VBS)は、
行コメントのみで囲みコメント記述は存在しない。
0451445
2006/09/12(火) 17:28:21ありがとうございます。
ご指摘の箇所、Worksheets("sheet1").Cells(i + 9, 1) と書き直してみました。
ただ、最初にエラーが発生するところが
Worksheets("sheet2").Copy Destination:=Worksheets("Sheet" & k)
なので、新しいシートの名前の定義が良くないのでしょうか?
0452448
2006/09/12(火) 17:36:07丁寧にどうもありがとうございますm(_ _)m
よくわかりました。
しかし、不便だなあ。
0453みっにい
2006/09/12(火) 18:51:40誰か助けてもらえないでしょうか?('。`)/~
例:1と2と3なら1,2,3,12,13,23,123
0454デフォルトの名無しさん
2006/09/12(火) 20:24:57根本的な解決では無いですが、
「編集」ツールバーを表示させて、「コメントブロック」「非コメントブロック」
を使用すると、複数行のコメントの設定/解除が一発で可能です。
0455447
2006/09/12(火) 20:40:20おぉ、スマソ。
見落としてた。シートのCopyメソッドにはDestinationの引数は使えないっすよ。
複数のセルをコピーさせるのが一番早いかな?
方法は色々あるが、コードがきちゃなすぎてどこから手をつけていいか分からん。
>>453
助けを求めるなら自分でどこまでやったか書いてくれんと
答える側もどこから説明を始めたらいいのか困りますよ。
まぁ、顔文字付のふざけた質問に答える奴もいないだろうけど。
0456447
2006/09/12(火) 21:09:57勝手に改造しちゃいました。
Sub Format()
i = 5
k = 3 'iと連動させたい?
Do Until IsEmpty(Worksheets("Sheet1").Cells(i, 1).Value)
Worksheets("Sheet2").Copy , Worksheets(Worksheets.Count)
With Worksheets(Worksheets.Count)
.Name = "Sheet" & k
.Range("E10") = Worksheets("sheet1").Cells(i, 1)
End With
i = i + 2
k = k + 1
Loop
End Sub
ちょっと強引過ぎますね。私も修行が足りません。
あと、プロシージャ名に予約語を使うとロクな事が無いので注意。
0457デフォルトの名無しさん
2006/09/12(火) 23:34:40キーボードメインでマウスを、あまり使用しないのであれば
http://www.officetanaka.net/excel/vba/tips/tips04.htm
ここにVBAコーディング時にコメントブロックをコンテキストメニューに
追加する方法が書いてある。
全然、楽になるんで一読してみるといいかも
0458デフォルトの名無しさん
2006/09/13(水) 09:16:33組み合わせパターン全種って、条件が単純そうに見えて、
結構細かい条件がいろいろあるんだよ。例えば
・全ての文字を1回ずつ使わなくてはならない(結果的に桁固定) → 123、132,213,231,312,321
・一つの文字を何度使っても良い(最大桁指定) → 11,222,333,1111,22222,…(最大5桁)
・一つの文字は1回しか使ってはいけない。(1桁〜文字の種類数の桁) → 1,2,3,11,12,13,21,22,23,31,32,33,123,…
他にもいろいろ。例を見る限り3番目の条件っぽいが、2番目の条件である可能性も捨てきれないし
もしかしたら、2桁以上では、必ず右より左が小さい数値でなくてはならないという条件があるのかもしれない。
そういうのを書いてくれなきゃアドバイスすら出来ないし、例え条件をきちんと書いても、丸投げなんて受け付けない。
自分で書いたコードを途中まででも間違っていてもいいから書け。
0459445
2006/09/13(水) 11:35:04シート2をそのままコピーして新しいシートに貼り付けると、うまくいかない
(値と別のシートに出力されてしまう)ので、レンジを指定して同じシートに貼り付けるようにしました。
対処療法的ですが、何とか出来ました。
Sub Format()
Dim NewWorkSheet As Worksheet
i = 0
k = i / 2 + 3
Do Until IsEmpty(Worksheets("Sheet1").Range("A9").Offset(i, 0).Value)
Set NewWorkSheet = Worksheets.Add()
NewWorkSheet.Name = "Sheet" & k
Sheets("sheet2").Range("A:AC").Copy Sheets("Sheet" & k).Range("A:AC")
Sheets("sheet1").Cells(i + 9, 1).Copy Sheets("Sheet" & k).Range("E10")
i = i + 2
k = k + 1
Loop
End Sub
0460デフォルトの名無しさん
2006/09/13(水) 11:51:05今は携帯からだから、コードは書いてやれんが、せめて字下げくらいしてくれ
読みにくいったらありゃしない
0461デフォルトの名無しさん
2006/09/13(水) 12:58:42>>453見りゃ、nCrのこと言ってるとしか読めないが
0462デフォルトの名無しさん
2006/09/13(水) 12:59:212ch初心者ですか?
0463デフォルトの名無しさん
2006/09/13(水) 14:49:340464デフォルトの名無しさん
2006/09/13(水) 14:53:472ch初心者ですか?
0465デフォルトの名無しさん
2006/09/13(水) 15:07:38> そういうのを書いてくれなきゃアドバイスすら出来ないし、例え条件をきちんと書いても、丸投げなんて受け付けない。
別に丸投げしてもいいじゃん。
気に食わないなら読み飛ばせよ。
0466デフォルトの名無しさん
2006/09/13(水) 16:58:02おまえレスしなくていいよ
でもウザイと思ってるのは俺だけだから気にするな
0467デフォルトの名無しさん
2006/09/13(水) 17:08:13書いていても
3行以上の
書き込みには
何故か過剰に
反応しだす子が
現れる。
0468デフォルトの名無しさん
2006/09/13(水) 17:20:13お前の日本語変だぞw
0469デフォルトの名無しさん
2006/09/13(水) 17:42:02やってから聞けよ
0470デフォルトの名無しさん
2006/09/13(水) 17:42:480471デフォルトの名無しさん
2006/09/13(水) 18:08:27なんでそんなに必死なの?
0472デフォルトの名無しさん
2006/09/13(水) 18:19:42>>458が正しいと言いたいのかなー
自演?
0473デフォルトの名無しさん
2006/09/13(水) 18:24:53上の長文は適切なアドバイスだろ。
きっと目に入ってないんだろうけどw
0474デフォルトの名無しさん
2006/09/13(水) 18:30:22>>461
ちなみに、これコードごりごり書くしかないね。
入出力の仕様がわからないと書けないけど。
0475デフォルトの名無しさん
2006/09/14(木) 09:39:00「だす」の使い方じゃね?
0476デフォルトの名無しさん
2006/09/14(木) 22:41:34遅レスだがトンクス。
0477デフォルトの名無しさん
2006/09/15(金) 00:15:23WebBrowser上で表示されている↓
<a name="order" href="javascript:submitWeb3Form(document.fuConfirmForm)">
<img src="/webbroker3/46/pc/images/bt_sinkai_b.gif" alt="新規買発注" width="80" height="18" hspace="12" vspace="8" border="0"/></a>
をVBAでクリックするやりかたがわかりません。
誰かお教え願います。
0478デフォルトの名無しさん
2006/09/15(金) 00:29:35すいませんできました。
失礼しました。
0479デフォルトの名無しさん
2006/09/15(金) 00:29:58えーとVBAでの制御でリンクを辿る様にしたいという事かな?
言っている事が微妙に分からんぞ?
0480デフォルトの名無しさん
2006/09/15(金) 02:20:18厳密に言うとリンク辿るというよりボタンを押したいんだろ
同じようでちょっと違う
0481デフォルトの名無しさん
2006/09/16(土) 11:50:20「ファイルを開く」ダイアログを「A*.txt」のように
ファイル名の先頭と拡張子でフィルタリングして表示したいと思っています。
しかしGetOpenFileNameのFilterを「A*.txt」とすると「すべてのファイル(*.*)」
になってしまいます。
Application.Dialogs(xlDialogOpen).Show ("A*.txt")
であればフィルタはかけられるのですが、ファイル自体を開いてしまいます。
ファイル自体を開く行為は処理で記述したいのです。
何か方法はありませんでしょうか?
0482デフォルトの名無しさん
2006/09/16(土) 14:14:17"A*.txt"ではなく"Text File(A*.txt),A*.txt"ね。
これでちゃんと、名前の頭がAで拡張子がtxtのものをフィルタリング出来たよ。
ちなみにExcel.Application.GetOpenFilenameではなく
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA"の方を使うこと。
VBA(Excel.Application)の話ではなくなるので、具体的な使い方はスレ違い。
0483デフォルトの名無しさん
2006/09/16(土) 16:06:09どうもありがとうございます。
APIを使うわけですね。
使い方などを調べてみます。
0484デフォルトの名無しさん
2006/09/17(日) 04:40:02"2006/9/1" と入力します。
このセルを Excel VBA で検索しアクティブにしようと思っています。
Sub x001()
Cells.Find(what:="2006/9/1").Activate
End Sub
を実行すると下記のエラーが出てしまいます。
実行時エラー '91':
オブジェクト変数またはwithブロック変数が設定されていません。
セルの書式を"文字列"にするとうまくいきます。
VBAで日付を検索するにはどうすれば宜しいでしょうか?
環境は、WinXP Pro SP2、Excel2003 SP無しです。
0485デフォルトの名無しさん
2006/09/17(日) 05:46:21ここにサンプルがあります。ご覧ください。
★ Let's Excel VBA ★
ttp://www.sanynet.ne.jp/~awa/excelvba/stepup002.html
上記のNo.92 複数シートの日付検索
0486デフォルトの名無しさん
2006/09/17(日) 05:55:53当然だな。日付ではなく文字列を検索しているんだから。
> VBAで日付を検索するにはどうすれば宜しいでしょうか?
文字列ではなく日付を検索すればいいだけでしょ。
""で囲ったら基本的に文字列だってのはわかるよね?
日付はどう書いてもいいし。
Cells.Find(DateSerial(2006, 9, 1)).Activate
Cells.Find(DateValue("2006/9/1")).Activate
Cells.Find(CDate("2006/9/1")).Activate
Cells.Find(#9/1/2006#).Activate
ちなみに文字列で直接書いても、日付形式で書けば日付を検索出来る。
Cells.Find("9/1/2006").Activate
Excelはアメリカ製のソフトなんで、日付の基本書式が日本人の感覚とは違うけどね。
ついでにエラーの原因は、"2006/9/1"なんてセルが存在しないため
FindメソッドがNothingを返しているのに、そのNothingに大してRangeオブジェクトのメンバである
Activateメソッドを使っているから、そのActivateメソッドが使えるオブジェクトが無いよという意味。
Findメソッドを使うときは、一度戻り値を変数に入れて、Is Nothingで検索結果の有無を判断した後で
処理に入るのが基本。
0487484
2006/09/17(日) 07:04:00早速のご回答ありがとうございます。
確認します。
0488デフォルトの名無しさん
2006/09/17(日) 11:03:180489デフォルトの名無しさん
2006/09/17(日) 12:02:35どうしたの?
0490デフォルトの名無しさん
2006/09/18(月) 19:04:32Private Sub test()
Dim i As Long
i = 256 * 256
End Sub
を実行すると
実行時エラー'6':
オーバーフローしました。
となるのですが、これは何がいけないのでしょうか。
excel2000(SR-1)
xp(sp1)
0491デフォルトの名無しさん
2006/09/18(月) 19:17:58VBAヘルプより
>整数型 (Integer) の変数は、16 ビット (2 バイト) の変数で、-32,768 〜 32,767 の範囲の値をとります。
0492491
2006/09/18(月) 19:24:49Clngで回避できるっぽいね..
0493デフォルトの名無しさん
2006/09/18(月) 19:34:10/ ̄ ̄ ̄ ̄\
/ \
/\ \ /|
||||||| (・) (・) |
(6-------◯⌒つ| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| _||||||||| | < 真面目に議論しているフリをしおって!けしからん!
\ / \_/ / \________________
\____/
0494デフォルトの名無しさん
2006/09/18(月) 19:35:06i = CLng(256 * 256)
としてみましたが、やはり同様のエラーが出ました。(vbaの仕様なんですかね?)
clngで引き続き調べてみます。
ありがとうございました。
0495491
2006/09/18(月) 19:38:200496デフォルトの名無しさん
2006/09/18(月) 20:29:33おかげさまで出来ました!
なんでこうなのかが今ひとつ分りませんが・・
ありがとうでした。
0497デフォルトの名無しさん
2006/09/18(月) 21:23:18実行時エラーとなります。
Sub test()
Dim myOlSel As Outlook.Selection
Dim o
Set myOlSel = Application.ActiveExplorer.Selection
For Each o In myOlSel
'何もしなくてもエラーになる
Next
End Sub
Selectionはメールアイテムですが、1000個だと大丈夫ですが、4000個
選ぶとすぐにエラーになります。回避する方法はないでしょうか。
ループの中でSet o=Nothing としても意味ありませんでした。
0498デフォルトの名無しさん
2006/09/18(月) 22:40:51メモリを増やす
0499デフォルトの名無しさん
2006/09/19(火) 00:16:06そりゃそうですが、ページファイルはぜんぜん増えないし、そういう
問題ではなさそうです。
ちなみにループしなくても同じでした。
Application.ActiveExplorer.Selection.cout
だけでも固まります。
0500デフォルトの名無しさん
2006/09/19(火) 10:29:05/ ̄ ̄ ̄ ̄\
/ \
/\ \ /|
||||||| (・) (・) |
(6-------◯⌒つ| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| _||||||||| | < 真面目に議論しているフリをしおって!けしからん!
\ / \_/ / \________________
\____/
0501デフォルトの名無しさん
2006/09/19(火) 10:29:11/ ̄ ̄ ̄ ̄\
/ \
/\ \ /|
||||||| (・) (・) |
(6-------◯⌒つ| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| _||||||||| | < 真面目に議論しているフリをしおって!けしからん!
\ / \_/ / \________________
\____/
0502デフォルトの名無しさん
2006/09/19(火) 21:37:410503デフォルトの名無しさん
2006/09/20(水) 03:37:200504デフォルトの名無しさん
2006/09/20(水) 17:47:530505デフォルトの名無しさん
2006/09/20(水) 18:12:23素直にVBAヘルプつかっとけ。
0506デフォルトの名無しさん
2006/09/20(水) 19:16:33探してはみたつもりなんだが・・
そもそもVBが向いてないとかだったらスマン、無知なんだ('`)
其の場合は言語問わないので参考になるソース見つける際のキーワードとか教えて頂きたいです。
0507デフォルトの名無しさん
2006/09/21(木) 01:47:21やりたい事は、変数"myDate月","myDate日" を二桁表示にする事です。
14-19行目をForとかArrayとか使わずに個別に書けば二桁の値が代入されるのですが、
下記の通りやると、18行目は2桁、21,22行目は1桁で表示されます。
Forステートメントの中で変数に値を代入するには、どうしたらよいでしょうか?
1 Sub test()
2
3 Dim myDate As Date
4 Dim myDate年 As String
5 Dim myDate月 As String
6 Dim myDate日 As String
7
8 myDate = "2006/9/1"
9
10 myDate年 = DatePart("yyyy", myDate)
11 myDate月 = DatePart("m", myDate)
12 myDate日 = DatePart("d", myDate)
13
14 For Each i In Array(myDate月, myDate日)
15 If i <= 9 Then
16 i = 0 & i
17 End If
18 MsgBox i
19 Next i
20
21 MsgBox myDate月
22 MsgBox myDate日
23
24 End Sub
0508デフォルトの名無しさん
2006/09/21(木) 02:14:3813行目以降に
myfutaketa = Format(myDate月, "00")
Msgbox myfutaketatuki
「日」の分も同じようにやってみて下さい。
0509508
2006/09/21(木) 02:16:36myfutaketatuki=Format(myDate月,"00")
です。
0510507
2006/09/21(木) 03:07:38出来ました! どもです。
0511デフォルトの名無しさん
2006/09/21(木) 15:01:21VBで、Sheet2の値をSheet1にコピーしたのですが、値に計算式が入力
されていたため、計算式を拾ってしまって、値そのものを拾ってくれません。
Worksheets("sheet2").Range("A1").Copy Worksheets("sheet1").Cells(2, 2)
どうすれば値のみを拾ってくれるのでしょうか?
0512デフォルトの名無しさん
2006/09/21(木) 16:53:41= .value
0513デフォルトの名無しさん
2006/09/21(木) 17:55:24例えばB1 N37 K7 L39・・・のようにばらばらに散らばったセルがあるとして、
それらの中のいくつかには背景色がついているとします。
背景色がついているセルの数がN(←いくつでもいいんですが)を超える場合、
ある数Aを1/2にする。っというブログラムはどうやって書けばいいんですか?
誰か教えてくれませんか?
0514デフォルトの名無しさん
2006/09/21(木) 17:59:03自分でどこまでやったんかを書きましょう。
基本です。
また、「ばらばらに散らばる」という抽象的な表現を使う場合、
ある範囲内に収まるのか(例えばA1〜Z250)か、それとも無制限に散らばっているのか。
その辺りも書くようにしましょう。
0515デフォルトの名無しさん
2006/09/21(木) 18:22:48説明不足ですみません。
ばらばらに散らばったというのは、ある範囲内に収まるものです。
今のところ次のような状態です。
1 Sub 背景色数()
2 Dim 背景色の数 As integer
3 Dim 行番号 As integer
4 背景色の数=0
5 行番号=0
6 For 行番号=1 to 50
7 If cells(行番号,3).Interior.ColorIndex = 色番号 Then
8 背景色の数 = 背景色の数+1
9 End If
10 Next 行番号
11 If 背景色の数>5 Then
12 range("B1")=a*0.5
13 End If
14 End Sub
なお、「背景色の数」というのは「背景色のついたセルの数」を
意味しています。さっきいった、ばらばらなセルの場合どのようにすれば
良いのかがわかりません。
0516デフォルトの名無しさん
2006/09/21(木) 18:25:190517デフォルトの名無しさん
2006/09/21(木) 19:18:36dim r, cell as range
set r = range("B1,N37,K7,L39")
for each cell in r
'ここで背景色のチェックとカウントアップ
next
決まった位置じゃないなら、"B1,N37,K7,L39"の部分をなんとかして文字列で作るか、
rangeオブジェクトを何とかして作れ。
0518デフォルトの名無しさん
2006/09/21(木) 19:21:21Application.FindFormat.Interior.ColorIndex = 3
Cells.Find(What:="", SearchFormat:=True).Activate
コレをヒントにエラー処理して応用汁
0519デフォルトの名無しさん
2006/09/21(木) 20:24:15レスありがとうございます。
valueのくっつけ方がわからなかったので下のようにやって取得しました。
Worksheets("sheet2").Range("A1").Copy
Worksheets("sheet1").Cells(2, 2).PasteSpecial Paste:=xlPasteValues
今度はセルを別シートに入れると、罫線がくっついて来たり、セルのサイズが
大きくなってしまったりします。どうすればセルはデフォルトのままで値だけを
取得できるのでしょうか?お願いします。
0520デフォルトの名無しさん
2006/09/21(木) 20:38:270521デフォルトの名無しさん
2006/09/21(木) 21:03:15セルの中で改行されているデータを改行で分けたい場合
どうすればいいですか?
0522デフォルトの名無しさん
2006/09/21(木) 21:08:27改行で分けた後、それぞれの文字列をどうしたいのだ。
0523デフォルトの名無しさん
2006/09/21(木) 21:13:560524デフォルトの名無しさん
2006/09/21(木) 21:20:11for i = 0 to ubound(ary)
debug.print ary(i)
next
0525デフォルトの名無しさん
2006/09/21(木) 21:23:260526デフォルトの名無しさん
2006/09/24(日) 22:12:48=SUM(J13:J19)
上記式を入力したセルがあり、表示としては
合計金額####円みたいな感じで実現可能でしょうか?
0527デフォルトの名無しさん
2006/09/24(日) 22:22:03セルの書式設定の表示形式で、「合計金額 #,##0円」とかする。
0528デフォルトの名無しさん
2006/09/24(日) 22:22:45=TEXT(SUM(略),"########")&"円"
0529デフォルトの名無しさん
2006/09/24(日) 22:30:58それだと、合計の合計が取れなくなるけどね。
0530デフォルトの名無しさん
2006/09/24(日) 22:44:54色々自分で検証やプログラムをやろうと思っているのですが、中々参考書も
なくて、困っています。
株で、銘柄を一定の条件を入れてスクリーニングし(例えば過去のPERが
ポートフォリオの中で低かった5%を常にリバランスしていく)、検証する
のって簡単にできそうでしょうか?
よろしくお願いいたします。
また、金融に活かせるプログラムの本や通信講座などありましたら
教えていただけるとありがたいです。
よろしくお願いいたします!
0531デフォルトの名無しさん
2006/09/24(日) 22:47:24うむ分かる。が、>>526 の要求の1行目に基づいてみた。複数の解を比較できることになったかな。
0532デフォルトの名無しさん
2006/09/24(日) 23:37:060533デフォルトの名無しさん
2006/09/25(月) 00:13:47SelectionChangeが起きたときに、はじけばいいんじゃね?
0534デフォルトの名無しさん
2006/09/25(月) 00:24:09シートの特定部分だけを選択できるようにするのが一般的だと思うけど、その逆だね。
with worksheet("sheet1")
.cells.locked = false
.range("B3:C5").locked = true
.protect
end with
0535523
2006/09/25(月) 00:25:25面倒でなければA1のセルを選択不可にするロジックを書いていただけないでしょうか?
0536デフォルトの名無しさん
2006/09/25(月) 00:30:350537532
2006/09/25(月) 08:11:02lockですね?ソースを参考にもっと詳しく調べてみます。
0538デフォルトの名無しさん
2006/09/25(月) 10:32:05Shell("cmd.exe /c start filename", vbNormalFocus)
のような形で書いており、うまく動作しております。l
これを Win98 系でも動作するように、
Shell("%ComSpec% /c start filename", vbNormalFocus)
と書き換えたのですが、(%ComSpec% の部分で)「ファイルが見つかりません」という
エラーが出て動作しませんでした。
%ComSpec% という、環境変数は Shell 関数の中では使えないのでしょうか?
また、上記の動作を WinNT 系と Win98 系両方で実現するにはどのような方法が
ありますでしょうか?
0539デフォルトの名無しさん
2006/09/25(月) 12:52:02普通にAPI使えば、同じコードでどっちでもいけるだろ。
0540デフォルトの名無しさん
2006/09/28(木) 18:15:582つの時間の時間差を格納したセルがあり、書式に"[hh]:mm:ss"を使用しています
この表示されている時間を文字列にしてMsgbox上で使いたいのですが、変換が思うように行きません
DatePartあたりで時・分・秒あたりを分割してから文字列として連結すれば良さそうなのですが
時の部分が24時間を越える事があるため上手く変換できません
上手い方法が何かあるでしょうか?
そのままmsgboxに流し込むと
28:31:29 が 1899/12/31 4:31:29 のようになるので
DatePart("d", time) - 30) * 24 + DatePart("h", interval(1)
と、やってみましたが、これは何か間違ってる気がしてなりません
時間の起点が1900/1/1/00:00:00なのかな……
0541デフォルトの名無しさん
2006/09/28(木) 18:17:12DatePart("d", time) - 30) * 24 + DatePart("h", time)
こんな感じです
0542デフォルトの名無しさん
2006/09/28(木) 18:29:00表示幅が十分にあるなら(####にならないなら)、msgbox range("a1").text
0543デフォルトの名無しさん
2006/09/28(木) 18:32:07凄く……スマートです……
大感謝!
0544デフォルトの名無しさん
2006/09/28(木) 22:03:350545デフォルトの名無しさん
2006/09/28(木) 22:45:00いろいろな方法を試してみたのですがわかりませんでした。
とりあえず現在は一度テキストファイルに変換して、それを
ワードで保存し直してエクセルで開くとなんとか取り込める
事が出来ます。
VBAのスキルが無いためワードでの保存までは手動でやってます。
何かほかに良い方法は無いでしょうか?
0546デフォルトの名無しさん
2006/09/29(金) 01:18:01Adobe Acrobat 7.0 Type Libaryというそれらしきものがあるんだ。
これ使えないかな?
0547デフォルトの名無しさん
2006/09/29(金) 13:17:39http://park7.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200603/06030199.txt
0548デフォルトの名無しさん
2006/09/30(土) 11:27:05下記のことを行うのはVBAで可能でしょうか。
**シート1***
A1 A2 A3
aaa XXX ccc
abc YY efg
********
**シート2***
A1 A2
XXX YY
001 00
002 25
003 50
*****
とあって、シート1のXXX,YYをシート2から反映させ
テキストファイルにそれぞれ
test001
test002
・・・
と出力させる。
test001のテキストファイルの内容はaaa001ccc
abc01efg
となっている状態。
宜しくお願いします。
0549デフォルトの名無しさん
2006/09/30(土) 11:32:26可能。
0550デフォルトの名無しさん
2006/09/30(土) 11:35:45不明瞭な点は多いが、とりあえず可能だよ。
まさかそんな曖昧な情報しか出さずに丸投げなんてする気じゃないと思うが
とりあえず、自分で出来るところまでコードを書いて、それをここに貼り
その上で何処が解らないのかをはっきりさせよう。
0551548
2006/09/30(土) 11:39:00ありがとうございます。
とりあえず可能かしりたかったので。
またコードを記述してみて質問させてもらうかもしれませんが
宜しくお願いします。
イメージ的にはテキストファイルのある一定の文字列のみ置換した形で複数の
ファイル(ファイル名も異なる)を自動生成する感じです。
0552549
2006/09/30(土) 11:42:09仕様がはっきりしてりゃ誰か解くかもしれないし、無視するかもしれない。
ただそれだけのこと。
0553デフォルトの名無しさん
2006/09/30(土) 17:47:22取りあえず解かないなら邪魔だから消えてくれ。
0554549
2006/09/30(土) 21:10:520555デフォルトの名無しさん
2006/09/30(土) 21:29:230556デフォルトの名無しさん
2006/09/30(土) 22:28:31ここは学校じゃないんだからやりとりは短くして欲しい。
わけわかってない人が書いた拙劣なコードなんて貼るだけ無駄。
わかってる人が良いコードを示し、それを理解することが大事。
0557デフォルトの名無しさん
2006/09/30(土) 23:07:03じゃあおまえが全部やってやれや
0558デフォルトの名無しさん
2006/09/30(土) 23:09:25ハァ?
0559デフォルトの名無しさん
2006/09/30(土) 23:14:51コードかいてもらったほうが
何をしたいのかが分かるし、答える方が簡単
ここが間違ってるよって感じで
0560デフォルトの名無しさん
2006/09/30(土) 23:17:19お前がそうしたければ、そのように誘導しろ
0561デフォルトの名無しさん
2006/09/30(土) 23:19:560562548
2006/10/01(日) 00:03:02シート1のB1の値をシート2のA2の値(A2から下の値)に入れ替えて
複数のファイルとしてファイル名を付けて保存したいのですが、
Stringへの値のいれかたがまずいのかエラー400が返ってきます。
ご教授宜しくお願いします。
0563548
2006/10/01(日) 00:03:47Dim XXXGYO_1 As Long
Dim XXXCOL_1 As Long
Dim XXXGYO_2 As Long
Dim XXXCOL_2 As Long
Dim FILENAME As String ' 保存するファイル名
Dim FILENAME2 As String ' 保存するファイル名付与
Dim YYYGYO As Long ' FILENAME2に入るValueのセル位置
Dim YYYCOL As Long ' FILENAME2に入るValueのセル位置
Dim OWARI As Long ' ループ回数制御
0564548
2006/10/01(日) 00:04:23XXXGYO_1 = 1: XXXCOL_1 = 2 ' Sheet1XXXセル位置
XXXGYO_2 = 2: XXXCOL_2 = 1 ' Shttt2XXXセル位置
YYYGYO = 2
YYYCOL = 2
OWARI = 1
0565548
2006/10/01(日) 00:04:56Sheets("Sheet2").Select
With Worksheets("Sheet2")
FILENAME2 = .Cells(YYYGYO, YYYCOL).Value
End With
0566548
2006/10/01(日) 00:07:01Sheets("Sheet2").Select
With Worksheets("Sheet2")
.Cells(XXXGYO_2, XXXCOL_2).Select
Selection.Copy
End With
Sheets("Sheet1").Select
With Worksheets("Sheet1")
.Cells(XXXGYO_1, XXXCOL_1).Select
ActiveSheet.Paste
Application.CutCopyMode = False ' コピーモード解除
End With
FILENAME = "C:\Documents and Settings\testUser\デスクトップ\自動生成\test_" + FILENAME2 + ".xls"
ActiveWorkbook.SaveAs FILENAME:= _
strFILENAME, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
XXXGYO_2 = XXXGYO_2 + 1
YYYGYO = YYYGYO + 1
OWARI = OWARI + 1
Loop
End Sub
0567548
2006/10/01(日) 01:24:03やりたいことは「新しいファイル名で保存する際、ファイル名(フルパス)を
変数にはいっている値を入れたい」ということです。
不安な点は下記になります。お願いします。
Dim FILENAME As String 'フルパスを格納
Dim FILENAME2 As String 'ファイル名に付与する変数
Dim XXXGYO_2 As Long 'FILENAME2に入れる値の位置格納
Dim XXXCOL_2 As Long 'FILENAME2に入れる値の位置格納
・・・
Sheets("Sheet2").Select
With Worksheets("Sheet2")
FILENAME2=Cells(XXXGYO_2,XXXCOL_2).Value
・・・
FILENAME="C:\DocumentAndSetting\・・・"+FILENAME2+".xls"
ActiveWorkbook.SaveAs FILENAME:= _
strFILENAME, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
0568デフォルトの名無しさん
2006/10/01(日) 12:04:34何だかよくわからないけど、こんなサンプルコードを書いてみた。
Dim r1, r2 As Range
Dim i As Long
Set r1 = Range("Sheet1!A1")
Set r2 = Range("Sheet2!A1")
For i = 1 To r2.CurrentRegion.Rows.Count - 1
Debug.Print r1.Value + r2.Offset(i, 0).Value + r1.Offset(0, 2).Value
Debug.Print r1.Offset(1, 0).Value + r2.Offset(i, 1).Value + r1.Offset(1, 2).Value
Next
0569デフォルトの名無しさん
2006/10/01(日) 12:07:20何か言いたいことがあったらどうぞ。
0570デフォルトの名無しさん
2006/10/01(日) 13:30:58Dim r1, r2 As Rangeってのは
Dim r1 As Range,r2 As Rangeと同じ?
0571デフォルトの名無しさん
2006/10/01(日) 13:33:550572デフォルトの名無しさん
2006/10/01(日) 13:36:03As Variant は略せるってこと?
0573デフォルトの名無しさん
2006/10/01(日) 13:49:01ここで回答してる人たちってけっこう詳しくて関心してしまいます。
ここで回答してる人たちって、IT系の職種で仕事してるの?
0574デフォルトの名無しさん
2006/10/01(日) 13:58:51です
>>573
どうなんだろう?
時々凄い人も降臨するけど俺もあなたと似たようなもん
ワークシート関数で物足りなくなってVBAはじめたクチだよ
そんな感じの人も結構多いんじゃないかな
0575デフォルトの名無しさん
2006/10/01(日) 14:02:40ありがとうございます。
そういう豆知識でも覚えるとすごくうれしいです。
事務員やってると、いつ会社の都合で他の職種に回されるか
わからない不安があるので、できればIT系の職種にでも
つきたいな〜って思うのですが、難しいですかね?
0576デフォルトの名無しさん
2006/10/01(日) 15:27:14あー、そうだね忘れてた。
dim r1 as range
dim r2 as range
ってことで。
0577デフォルトの名無しさん
2006/10/01(日) 15:58:09> 事務員やってると、いつ会社の都合で他の職種に回されるか
> わからない不安があるので、できればIT系の職種にでも
> つきたいな〜って思うのですが、難しいですかね?
若くて(25歳以下)それなりの学歴(大卒以上)があれば、会社を選ばなければ転職できるでしょう。
どちらも無い場合は、卓越した業務知識か何らかの資格があれば、それを必要としている
ところにひっかかるかも。
いわゆる「イイトコ」にいきなり入るのはまず無理。
0578デフォルトの名無しさん
2006/10/01(日) 18:16:050579デフォルトの名無しさん
2006/10/01(日) 19:07:100580デフォルトの名無しさん
2006/10/02(月) 13:47:320581構造体をプロシージャへ渡す
2006/10/03(火) 14:41:50下記のエラーメッセージがでます。
「パブリックオブジェクトモジュールで定義されたユーザー定義型に限り、
変数に割り当てることができ、実行時バインディングの関数を渡すことができます」
これは何が原因なんでしょう?
普通にグローバル変数を定義する感じでは
使えないんでしょうか?????
'構造体の宣言--------------------------
Public Type Record
seibetu As String
name As String
End Type
'呼び出し元------------------------------
Sub aa()
Dim k_Record() As Record
ReDim k_Record(1)
k_Record(0).seibetu = "男"
k_Record(0).name = "tamori"
bb (k_Record)
End Sub
'呼び出し先-------------------------------
Sub bb(k_Record)
MsgBox k_Record.name
End Sub
0582デフォルトの名無しさん
2006/10/03(火) 14:48:09Class使え
0583デフォルトの名無しさん
2006/10/03(火) 15:27:50変数をSubプロシージャの外で宣言して、モジュールレベルの変数として扱えばいいんじゃね?
0584デフォルトの名無しさん
2006/10/03(火) 15:28:11マジで教えてください<(_ _)>
やりたいこと。
エクセルのワークシートの、1〜k(変数)行までを削除して、
k+1の行を 一番上にもってきたい。これをVBAで書きたい。
kはユーザーフォームのtextbox1に代入すると反映されるようにしたい。
で、初心者が作ってみた、VBAのコードなですけど、
どうか正しい書き方を教えてください。
Sub 日数変更()
UserForm1.Show
End Sub
Private Sub CommandButton1_Click()
Dim 行番号 As Integer
行番号 = TextBox1.Value
Rows("6:行番号").Select ←「型が一致しません」とでます。
Selection.Delete Shift:=xlUp
End Sub
以上です。マジお願いします!
0585デフォルトの名無しさん
2006/10/03(火) 15:41:05Rows("6:" & 行番号).Delete
Rows(6).Resize(行番号 - 6 + 1).Delete
0586デフォルトの名無しさん
2006/10/03(火) 15:50:56実は、6行目からk行目までを削除して、k+1行目を6行目に
もってきたいんですけど、その場合はどうすればよいですか?
ちなみに、本当は、テキストボックスに1を入れると、6行目の1行が
テキストボックスに10を入れれば、6行目から15行目までが
消えるようにできれば、本望です。
たびたび、すいませんが、教えて下さい<(_ _)>
0587デフォルトの名無しさん
2006/10/03(火) 15:53:10>実は、6行目からk行目までを削除して、k+1行目を6行目に
もってきたいんですけど、その場合はどうすればよいですか?
ここは、無視して下さいw
先ほど指摘してもらった場合でやってみると、
テキストボックスに1など入れるとエラーになってしまいます。
0588デフォルトの名無しさん
2006/10/03(火) 15:57:40ありがとうございました。できました!!!お世話になりました<(_ _)>
Private Sub CommandButton1_Click()
Dim 行番号 As Integer
行番号 = TextBox1.Value
Range(Rows(6), Rows(行番号)).Select
Selection.Delete Shift:=xlUp
End Sub
0589デフォルトの名無しさん
2006/10/03(火) 17:39:16Private Sub CommandButton1_Click()
Range("6:" & TextBox1.Value + 5).Delete
End Sub
ちゃんと書けば
Private Sub CommandButton1_Click()
If Val(TextBox1.Value) > 0 Then Range("6:" & Int(TextBox1.Value) + 5).Delete
End Sub
0590デフォルトの名無しさん
2006/10/03(火) 21:09:07selectしなくても出来ることは、selectせずにやった方がいいよ。
アクティブセルの位置が変わらないから。
0591デフォルトの名無しさん
2006/10/03(火) 21:45:12申し訳ないですが、もう1つ見てもらいたいです<(_ _)>
Private Sub CommandButton1_Click()
Dim 日数 As Integer
日数 = TextBox1.Value
Dim f As CellFormat
Range(Cells(f, 日数)).Select ←ここで『型が一致しません』がでます。
ActiveCell.FormulaR1C1 = "=(SUM(R[-日数+1]C[-1]:RC[-1])+RC[-1])/(日数+1)"
Range(Cells(f, 日数)).Select
Selection.AutoFill Destination:=Range(Cells(f, 日数), Cells(f, 750)), Type:=xlFillDefault
Range(Cells(f, 日数), Cells(f, 750)).Select
ActiveWindow.ScrollRow = 739
省略
ActiveWindow.ScrollRow = 1
Range("G26").Select
End Sub
FはワークシートのFとして使ったつもりが、変数を定義してくださいと
言われたので、dim F as cellformat にしました。だけど、
次の式で、型が一致しませんと出てしまい、よくわからない状態です。お願いします。
0592デフォルトの名無しさん
2006/10/03(火) 23:02:59>Dim f As CellFormat
Dim f As String
でやってみたら?ExcelのVBA知らんけど。
0593デフォルトの名無しさん
2006/10/03(火) 23:06:18回答ありがとうございます。
それなんですが、自分もやってみたんですけど、同じように
エラーが出ちゃったんです・・・ orz
0594デフォルトの名無しさん
2006/10/03(火) 23:41:08の意味もわからんが、その上Cellsの行と列が反対なんじゃね?
0595デフォルトの名無しさん
2006/10/03(火) 23:58:55何か言いたいことがあったらどうぞ。
0596デフォルトの名無しさん
2006/10/04(水) 00:06:07やりたいこと(仕様)をきっちり書いてくれ。
0597デフォルトの名無しさん
2006/10/04(水) 00:06:53数値 = TextBox1.Value
Dim f As cellformat
で、(f行、数値)のセルを選択したいんです。
Range("f数値").Select じゃ、エラーになるので、
正しい方法わかる方、是非教えてください(>_<)
0598デフォルトの名無しさん
2006/10/04(水) 00:10:420599エスパー登場
2006/10/04(水) 00:21:160600デフォルトの名無しさん
2006/10/04(水) 00:32:11>598
セル(F数値)を選択したいのです。例えば、セル(F5)とかです。
0601エスパー登場
2006/10/04(水) 00:38:28そしてセルを指定する時の()内は、(行, 列)で指定する。
F5なら(5, 6)だ。
0602デフォルトの名無しさん
2006/10/04(水) 00:39:56いや、君は謝る必要はない。
すべては >>559 の能力が足らないのが原因だ。
0603デフォルトの名無しさん
2006/10/04(水) 00:42:060604デフォルトの名無しさん
2006/10/04(水) 00:58:18エクセルの列Aに750行まで数値が入ってます。
(為替とかだと思ってください。)
そして、セル【B12】に、以下の式を打ちます。
=(sum(A1:A12)+A12)/13
この計算式を750行まで引っ張って完了です。
基本はこれなんですけど、ホントにやりたいことは
最初のセル(さっきは、B12)を、B20くらいにして
そこに打ちこむ式を
=(sum(A○:A20)+A20)/(20-○+1 +1 ) ※ ○は変数
こうしたいんです。
もし、○=10ならば
=(sum(A10:A20)+A20)/(20-10+1+1)
=(sum(A10:A20)+A20)/12
そして、これを750行まで引っ張れば完成です。
やりたいのはこれなんですけど、○を、
ユーザーフォームのテキストボックスを使って
代入できる形にしたいんです。
もしこんなん簡単だよって神様がいらっしゃったら
お手数ですが、なにとぞよろしくお願いします(>_<)
0605デフォルトの名無しさん
2006/10/04(水) 01:19:57丸投げってのは、ブックのうpを含めてだよ。
やりたいことも、それを実現したいブックも、全部投げてよこしてこそ丸投げ。
0606デフォルトの名無しさん
2006/10/04(水) 01:40:44○が10のときの「A20の20」は一体どこから出てくるのだ?
>=(sum(A1:A12)+A12)/13
と整合性がとれてないぞ。
ヒントは下のコード。
Cells(日数, 2).FormulaR1C1 = "=(SUM(R[" & -日数 + 1 & "]C[-1]:RC[-1])+RC[-1])/(" & 日数 + 1 & ")"
変数を計算した結果で文字列を組み立てて、それをformulaとして設定すればいい。
あとは仕様にあわせて修正すべし。
0607デフォルトの名無しさん
2006/10/04(水) 01:51:00range(cells(1,2), cells(5,2)) = "=sum(..."
とかすればいいから。
0608デフォルトの名無しさん
2006/10/04(水) 01:51:48どうせVBAで処理するならいっそのこと計算までして値を代入した方がいいんじゃないか?
まあ、既存のセルの値が変化しない事が前提だが
0609デフォルトの名無しさん
2006/10/04(水) 01:52:23range(cells(1,2), cells(5,2)).formular1c1 = "=sum(..."
0610デフォルトの名無しさん
2006/10/04(水) 01:54:48式じゃないといけない場合でも、動的に式を設定するのではなくて、
例えば全然関係ないH1とかにtextboxで入力した値を設定するという前提で、
"$H$1"を使った式をあらかじめ設定しておくという手もあるね。
0611デフォルトの名無しさん
2006/10/04(水) 01:58:400612デフォルトの名無しさん
2006/10/04(水) 08:23:19よくアプリケーションをインストーすする際にdirの指定が参照ボタンを押すと出てきたりしますよね。
それを利用して、[参照]のコマンドボタンを押して、
場所を指定するとそれがテキストボックスに反映されるようにしたいのですが、
どなたか教えていただけませんか?
0613デフォルトの名無しさん
2006/10/04(水) 09:29:06どっちにしても、上の語句でググればいくらでも情報ころがってるぞ。
Common Dialogの方ならExcel.Applicationからも呼べるし。
0614デフォルトの名無しさん
2006/10/04(水) 10:06:08あるセルに
>>ddd日
という文字列があるかどうか判定し、
あればdddだけを取り出す。dddは小数点を含む任意桁数の数字です。
0615デフォルトの名無しさん
2006/10/04(水) 10:12:42正規表現で m/(\d+\.?\d*)日/
0616デフォルトの名無しさん
2006/10/04(水) 11:19:40VBAでなくて関数だとこんなの。
IF(RIGHT(A1) = "日",LEFT(A3,LEN(A1)-1),A1)
0617616
2006/10/04(水) 11:20:37IF(RIGHT(A1) = "日",LEFT(A1,LEN(A1)-1),A1)
0618デフォルトの名無しさん
2006/10/04(水) 11:54:55A1=水曜日
で、「水曜」が返っちゃうので、条件を満たしてない。
> dddは小数点を含む任意桁数の数字
あ、別に直して書き込まなくていいからね。
0619デフォルトの名無しさん
2006/10/04(水) 12:16:45>606
マジありがとうございます。
Cells(日数, 2).FormulaR1C1 = "=(SUM(R[" & -日数 + 1 & "]C[-1]:RC[-1])+RC[-1])/(" & 日数 + 1 & ")"
のヒントで、かなり進みました!!ちょっといじって、変えてみます!
0621デフォルトの名無しさん
2006/10/04(水) 14:15:33Right$(Range("A1").Text, 1) = "日" And IsNumeric(Left$(Range("A1").Text, Len(Range("A1").Text) - 1))
で判断。
処理内容によるが、変数に代入するなりすればスッキリするはず
0622デフォルトの名無しさん
2006/10/04(水) 14:49:04・コマンドボタンをセル上に配置する
・配置したコマンドボタンは隣接したセルと一緒にソートされて配置が入れ替わる ←ここまでは出来た
ここから、ソートされて位置が常時変更になる特定セルの値をVBAから参照したいんですが
何か方法はありますでしょうか?
コマンドボタンにLinkedCellがあれば楽なんですが……
0623622
2006/10/04(水) 14:58:46ワークシート上で固定の別セルから参照すれば、並べ替えても参照が切れないので
そっちをVBAから参照すればとりあえず解決できるようです
ただ、もし他の方法があればご指摘頂ければ幸いです
0624デフォルトの名無しさん
2006/10/04(水) 15:12:26ActiveSheet.Shapes("Button 1").TopLeftCell.Column
ActiveSheet.Shapes("Button 1").TopLeftCell.Row
じゃダメ?
0625622
2006/10/04(水) 15:24:03ありがとうございます
ブレークポイント置いてローカル変数参照した所
確かにそこにボタン位置のセルの場所が格納されてました
今後別セルに参照を置けない場合もそれで大丈夫そうです
0626デフォルトの名無しさん
2006/10/05(木) 13:35:17Private Type typREC
CODE As String * 5 ' コード
MAKER As String * 10 ' メーカー
End Type
っていう記述を見つけたんですが、
ここで「 * 5」や「 * 10」は
なんの数値を宣言してるんでしょう??
0627デフォルトの名無しさん
2006/10/05(木) 13:58:100628デフォルトの名無しさん
2006/10/05(木) 16:28:34ActiveSheet.Buttons.Add(XXX, YYY, HHH, VVV).Select
で、ボタンを追加するのですが、そのときに「Button 1」と名称がついているようですが、
その名称を取得もしくは、任意に名づけたいのですが、どう書けばいいのでしょうか?
Selection.Characters.Text = "HOGEHOGE"
と、テキストを変えるのではなく、ボタンそのもののオブジェクト名?を変えたいのですがわかりません。。。
お願いします。
0629デフォルトの名無しさん
2006/10/05(木) 19:00:28caption
0630614
2006/10/05(木) 19:42:07ありがとうございます。
>>615
”日”の部分をセル参照にするには、どう書けば良いのでしょうか。
あと、正規表現をベタでセルに書いてOKなのでしょうか。
0631デフォルトの名無しさん
2006/10/05(木) 19:54:34ScreenUpdatingをFalseにして、
VBAの長時間処理をしている時にExcelにイベントを
発生させるような事象(※)を発生させると、ストールします。
有効な対策があれば教えて下さい。
処理の中ではWebクエリを使った外部データの取り込みも
しています。
※ ・スクリーンセイバーの起動
・他のAPのウィンドウを開く
・Excelのウィンドウ閉じるボタンの上にマウスを持って行く
等
0632デフォルトの名無しさん
2006/10/05(木) 19:58:29> ”日”の部分をセル参照にするには、どう書けば良いのでしょうか。
普通に。
> あと、正規表現をベタでセルに書いてOKなのでしょうか。
OKなわけない。
VBAで正規表現を使う方法を調べて、それに従え。
0633628
2006/10/06(金) 06:57:31早速ありがとうございます。
captionですか...
captionを使うとすると、そのボタンをSelectしたいときは、どのようにしたらいいのでしょうか?
ActiveSheet.Shapes("Button 1").Select
ボタンの選択方法を↑しか知らないので、しつこいようですが教えてください。
0634628
2006/10/06(金) 07:03:21ボタンはそのたびに追加されていくので、
ActiveSheet.Shapes("Button 1").Select
の"Button 1"は、常に変化します。
なので、Addされた時点で、名前を取得するか、定義したいのですが。。。
0635デフォルトの名無しさん
2006/10/06(金) 08:21:07構文、データ型、演算子、命令、
オブジェクト・メソッド・プロパティ・関数等の一覧等を
体系的に説明した書籍があれば、教えて下さい。
0636デフォルトの名無しさん
2006/10/06(金) 08:37:31ActiveSheet.Buttons.Add(XXX, YYY, HHH, VVV).Select
が出来て、なんでオブジェクトの名前を取得・変更する方法が解らないのかが不思議だ。
このコードは
ActiveSheet.Buttons.Add(XXX, YYY, HHH, VVV)
が返したボタンオブジェクトに対して「Select」という命令を実行してるんだろ。だったら同じく
ActiveSheet.Buttons.Add(XXX, YYY, HHH, VVV)
が返したボタンオブジェクトに対して「= Nme」で名前を取得したり
「Name = "任意名"」で名前を変更すればいいだけの話じゃん。
Selectしたけりゃ、その後いくらでもShapes("任意名or取得名")をSelectすりゃいいしWithで処理しても構わない。
逆にSelectしてあるなら、「= Selection.Name」や「Selection.Name = "任意名"」で名前の取得・変更可能だし。
>>635
「VBAの」ということであれば、VB6の書籍や解説サイトを探せば事足りる。
「Excelオブジェクト(App,Book,Sheet,Shapes等)の」ということであれば、VBAヘルプを見れば事足りる。
0637628
2006/10/06(金) 09:39:43根本的なことを勉強せずに、上辺だけでVBAを使っているので、
しっかり勉強された方には、それがなぜわからないのかが理解できない。。。
ごもっともです。反省します。。。
「Selection.Name = "任意名"」
で、解決いたしました。
大変感謝いたします。ありがとうございました。
0638デフォルトの名無しさん
2006/10/06(金) 16:17:22ですが、実行時エラー91(オブジェクト変数またはWithブロック変数が
設定されていません。)になります。どこが不味いのでしょうか。
なお、判例と項目軸は非表示です。
Dim dataRg As Range
Set dataRg = Range("A1:J1")
Dim graphRg As Range
Set graphRg = Range("B3:I18")
Sheets("GWORK").Select
ActiveSheet.ChartObjects.Add graphRg.Left, graphRg.Top, graphRg.Width, graphRg.Height
With ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
ActiveChart.SetSourceData dataRg, xlRows
ActiveChart.ChartType = xlLine
ActiveChart.Legend.Select
Selection.Delete
ActiveChart.Axes(xlCategory).Select
Selection.Delete
0639デフォルトの名無しさん
2006/10/06(金) 23:33:37Range("A3:E3").Select
Selection.Copy
Range("G3").Select
ActiveSheet.Paste
これで、もしも、G3に値があったら、G3ではなくG4に、
さらに、もしG4にも値が入っていたら、G5に・・・G6、G7・・・
と言う感じで、貼り付けたいんですが
これってどのように書けばよいか教えてください(>_<)
0640デフォルトの名無しさん
2006/10/07(土) 00:25:59↓
Range("G65536").End(xlUp).Offset(1).Select
0641デフォルトの名無しさん
2006/10/07(土) 01:37:02ありがとうございました!!<(_ _)>
0642デフォルトの名無しさん
2006/10/07(土) 03:54:51Activeうんちゃらはエラーの元というのは置いておき、動く書き方はこう。
Dim dataRg As Range, graphRg As Range
Set dataRg = ActiveSheet.Range("A1:J1")
Set graphRg = ActiveSheet.Range("B3:I18")
Sheets("GWORK").Select
With ActiveSheet.ChartObjects.Add(graphRg.Left, graphRg.Top, graphRg.Width, graphRg.Height).Chart
.SetSourceData Source:=dataRg, PlotBy:=xlRows
.ChartType = xlLine
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
.HasLegend = False
.HasAxis(xlCategory, xlPrimary) = False
End With
凡例とX軸は無いものとしてあるから念のため。
ちなみにデータのあるシートをアクティブにしてから実行しないと中身が出てこない。
で、元のソースでなぜうまくいかないかというと、
ChartObjects.Addメソッドでチャートがアクティブにならないから。
With ActiveChart
のところにブレークポイントを置いてみればわかるでしょ。
0643デフォルトの名無しさん
2006/10/07(土) 04:36:34名前でアクセスするには、どうしたらよいでしょう?
Excel2007です
0644デフォルトの名無しさん
2006/10/07(土) 05:25:11ヘルプに書いてある。
つーか、質問スレでVistaだのOfice2007だのと恥ずかしげも無く
堂々と書いてる子を見ると思うわけよ、無知な上に恥知らずってのは怖いなぁ、とw
β版使っていながら他人に質問するなんて、普通は恥ずかしくて出来ない。
しかもその内容が、前バージョンと違いがある部分ですら無いなんて、、、
0645638
2006/10/07(土) 07:36:46どうもありがとうございました。
0646デフォルトの名無しさん
2006/10/07(土) 10:46:25ボタンがクリックできる状態になりません。
ボタンの上にカーソルを持っていくと十字マーク(ボタン移動可能な
マーク)になります。
何か操作が足りないのだと思いますが、どうすれば良いのでしょうか。
0647デフォルトの名無しさん
2006/10/07(土) 11:08:17ボタンに割り当てたマクロを
ツール > マクロ > マクロ
から直接指定しましょう。
0648646
2006/10/07(土) 11:16:12ありがとうございます。
Bookのクローズ、オープンでクリックできるようになりました。
元の原因は分かりませんが。
0649デフォルトの名無しさん
2006/10/07(土) 16:13:56ヘルプに見てもわかんないんですよ。
hoge.moge
でアクセスできないんですよ。
あと、βだから質問できないなんて、どういう理論ですかい。
世の中で公開されているソフトの多く(9割り)は、β版、α版のソフトという統計はご存知?
恥ずかしいのはどっちでしょうかね?
0650デフォルトの名無しさん
2006/10/07(土) 17:03:32例えばrange("range_name").selectとかいう話?
0651デフォルトの名無しさん
2006/10/07(土) 17:07:13後半部分は、おまえさんの言うとおりだからもう煽るな。
0652デフォルトの名無しさん
2006/10/07(土) 17:38:15デザインモード
0653デフォルトの名無しさん
2006/10/07(土) 20:01:43安定版があるのにそれを使おうとしないなんて理解しかねる
どんな先進の機能がついててもそれを使えないようじゃ、不安定要因が増すだけ
でも、質問しちゃいけないとは思わないけどね
回答が帰って来る可能性が減るだけ、そこもやっぱり自己責任
0654デフォルトの名無しさん
2006/10/07(土) 20:15:53プログラマの発言とは思えんな。
0655デフォルトの名無しさん
2006/10/07(土) 20:18:44つかありえないし
0656デフォルトの名無しさん
2006/10/07(土) 20:23:49うざいぞ。質問する気も答える気もないなら、去れ。
0657句読点書けないバカをサマージャンボする俺 ◆9NQzQ21lx.
2006/10/07(土) 20:32:530658デフォルトの名無しさん
2006/10/07(土) 20:34:24> つーか、質問スレでVistaだのOfice2007だのと恥ずかしげも無く
> 堂々と書いてる子を見ると思うわけよ、無知な上に恥知らずってのは怖いなぁ、とw
> β版使っていながら他人に質問するなんて、普通は恥ずかしくて出来ない。
恥ずかしげも無く、よくこんなこと書けるなぁwwwwww
0659デフォルトの名無しさん
2006/10/07(土) 20:36:17>>653 は業務で回してる人間ならこういう発想になると思うが
まぁ、何が言いたいかと言うと下らん論議はスレ違いだ、他所でやれ
0660デフォルトの名無しさん
2006/10/07(土) 20:38:440661デフォルトの名無しさん
2006/10/07(土) 20:42:37この展開で敢えて墓穴を掘る君が大好きだ。
0662デフォルトの名無しさん
2006/10/07(土) 20:44:100663デフォルトの名無しさん
2006/10/07(土) 20:47:53もう頑張らなくていいからさ。
0664デフォルトの名無しさん
2006/10/07(土) 21:48:310665デフォルトの名無しさん
2006/10/07(土) 22:39:440666デフォルトの名無しさん
2006/10/07(土) 23:11:21騒いでいるときに悪いが、マジレス。
例えば教科の成績表のようなものを作ってみて、以下のコードを実行してみるとか。
Public Sub RangeNameSample()
Const orgRow As Long = 1, orgCol As Long = 1
Dim j As Long
ActiveSheet.Cells(orgRow, orgCol).CurrentRegion.Name = "成績表"
With ActiveSheet.Range("成績表")
For j = 1 To .Columns.Count
.Offset(0, j - 1).Resize(.Rows.Count, 1).Name = .Cells(1, j).Value
Next
ActiveSheet.Range("英語").Interior.ColorIndex = 34
.Sort Key1:=ActiveSheet.Range("英語"), Order1:=xlDescending, Header:=xlGuess
End With
End Sub
データベース的な扱いをするなら、ListObjectを作って操作すると、コードが読みやすくなる。
0667デフォルトの名無しさん
2006/10/07(土) 23:17:35>>650
0668デフォルトの名無しさん
2006/10/07(土) 23:30:54レス無いから、コード書いてみたテスト。
0669デフォルトの名無しさん
2006/10/08(日) 05:11:23おお。それですね
0670デフォルトの名無しさん
2006/10/08(日) 11:44:52strconv関数で全角文字を半角文字に変換するとき
ひらがな、カタカナだけ除外する方法はありますでしょうか。
(半角カナは濁点が一字になってしまうので…)
RegExpのreplaceとかで何とかならんかとも考えたのですが
どうやればいいか、よくわからんです。
0671デフォルトの名無しさん
2006/10/08(日) 15:49:07変数・配列ののメモリを開放するには
動的配列は
Erase arr
オブジェクトは
set obj = Nothing
とかだと思いますが、
ユーザー定義配列の場合はどうすればよいでしょう??
0672デフォルトの名無しさん
2006/10/08(日) 16:26:410673デフォルトの名無しさん
2006/10/08(日) 17:04:41コード書いたんだけど、改行が多いって怒られてupできない。
かなとカナの範囲をExecuteメソッドでMatchCollectionに入れて、それをチェックしながら、それ以外の部分を半角に変換すればいいと思う。
0674デフォルトの名無しさん
2006/10/08(日) 17:08:22Dim re As New RegExp, reMatch As MatchCollection
Dim strPattern As String, orgString As String
Dim r As Range, i As Long, k As Long, tarStrLen As Long
strPattern = "([ぁ-んァ-ンー、,。「」]+)"
With re
.IgnoreCase = False
.Global = True
For Each r In ActiveCell.CurrentRegion
.Pattern = strPattern
Set reMatch = .Execute(r.Value)
If reMatch Is Nothing Then
r.Value = StrConv(r.Value, vbNarrow)
Else
i = 1: orgStr = ""
tarStrLen = Len(r.Value)
For k = 1 To reMatch.Count
j = reMatch(k - 1).FirstIndex + 1
If i < j Then orgStr = orgStr & StrConv(Mid(r.Value, i, j - i), vbNarrow)
orgStr = orgStr & reMatch(k - 1).Value
i = j + reMatch(k - 1).Length
Next
r.Value = orgStr & StrConv(Right(r.Value, tarStrLen - i + 1), vbNarrow)
Set reMatch = Nothing
End If
Next
End With
Set re = Nothing
End Sub
0675デフォルトの名無しさん
2006/10/08(日) 17:10:29upできた。見にくくてスマソ。
0676デフォルトの名無しさん
2006/10/08(日) 17:14:20こういうのって、完璧にやろうとすると疲れるから、どっかで妥協しないといけないと思う。
0677デフォルトの名無しさん
2006/10/08(日) 17:32:41With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "([ぁ-んァ-ンー、,。「」]*)([^ぁ-んァ-ンー、,。「」]*)"
For Each objCell In ActiveCell.CurrentRegion
For Each objMatch In .Execute(objCell.Value)
strResult = strResult & objMatch.SubMatches(0) & StrConv(objMatch.SubMatches(1), vbNarrow)
Next objMatch
objCell.Value = strResult
Next
End With
0678デフォルトの名無しさん
2006/10/08(日) 17:39:24エッチなのはいけないと思います!!!
0679デフォルトの名無しさん
2006/10/08(日) 17:42:32そうだよね。SubMatchesという手があるんだよね。勉強になりますた、ハイ。
0681671
2006/10/08(日) 18:58:11おめぇみてーな奴
オラでぇきれーだぁ
0682デフォルトの名無しさん
2006/10/08(日) 20:13:030683デフォルトの名無しさん
2006/10/08(日) 20:22:120684デフォルトの名無しさん
2006/10/08(日) 21:40:44のぞきたいっていってるんだからそれでいいぢゃないか。(;´Д`)ハアハア
0685デフォルトの名無しさん
2006/10/08(日) 22:02:08と思ったら、されないね。気のせいだったか。
0686デフォルトの名無しさん
2006/10/08(日) 22:03:05[ぁ-んァ-ヴー,、。「」]
くらいが実用的範囲か。ヴじゃなぁ、せっかくの雰囲気が…
0687デフォルトの名無しさん
2006/10/09(月) 00:48:56動的なら、Eraseすればとりあえず解放されているようには見える。中で何やってるかは知らない。
0688デフォルトの名無しさん
2006/10/10(火) 22:40:24Accessバージョン:2003
OracleDBにリンクされたテーブル(odbc)の接続について質問です。
下記コードにてConnectの接続文字列の取得をしており、
OpenDatabaseのパラメータの箇所でエラー
(システムで予約しているエラー)が出てしまいます。
(OracleDBのリンク先がローカルであれば問題無いのですが、
サーバのOracleDBにリンクした場合にエラーが出てしまいます。)
ちなみに、Connectionは以下の内容です。
"ODBC;DRIVER={Oracle in OraDb10g_home1};SERVER=AAA;UID=test;PWD=test;DBQ=test;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=Me;CSR=F;FWC=F;FBS=60000;TLO=O;"
どうぞ、よろしくお願い致します。
0689688
2006/10/10(火) 22:40:58Dim lstrConnect as string
Dim dbs As DAO.Database
Dim tdf As DAO.TableDef
Dim qu As DAO.QueryDef
Set dbs = Application.CurrentDb
For Each tdf In dbs.TableDefs
If CBool(tdf.Attributes And dbAttachedODBC) Then
Debug.Print tdf.Name; vbTab; tdf.sour; vbTab; tdf.Connect
lstrConnect = tdf.Connect
Rem If ... Then
Rem 接続しデータ検索を行う処理
Rem End If
End If
Next
Set dbs = OpenDatabase("", False, False, lstrConn)
Set qu = db.CreateQueryDef("", lstrSQL)
Set rs = qu.OpenRecordset(dbOpenDynamic)
Do While Not rs.EOF
〜〜〜〜略〜〜〜〜
End Sub
0690デフォルトの名無しさん
2006/10/10(火) 22:48:030692デフォルトの名無しさん
2006/10/10(火) 23:31:340694デフォルトの名無しさん
2006/10/11(水) 11:40:35プログラム経験はあるのですが、VBA自体に慣れていないので、苦戦中です。
Excelで、セルの値が変更されたら、処理を行う関数を作っているのですが、
Sub Worksheet_Change(ByVal Target As Range)
’処理いろいろ
End Sub
などと書いた後、中身を関数化しようと、
Sub Worksheet_Change(ByVal Target As Range)
CalculateTable(Target)
End Sub
Public Sub CalculateTable(Target As Range)
' 処理いろいろ
End Sub
と書いたのですが、Excelでセルの内容を変更すると、
CalculateTable(Target)
の行で、「オブジェクトが必要です。」というエラーがでます。
これは、どういうことなんでしょうか。
0695694
2006/10/11(水) 11:48:21Call CalculateTable(Target)
か、もしくは、括弧をつけないで、
CalculateTable Target
でいいのですね。
Functionも一緒に書いていたのですが、そちらは、
普通の関数のように(カッコをつけて、callもつけないで)呼べるので、
迷ってしまいました^^;
ステートメントと関数呼び出しの違いなのっだと思うのですが、
他言語使っているとハマりやすいと思うのですが、
この辺の文法的な説明ってどっかに記述ありますか?
0696694
2006/10/11(水) 11:51:52Excel で VBA マクロを書くための早見表
http://www.uopmu.ees.osakafu-u.ac.jp/~yabu/soft/excel.html
0697デフォルトの名無しさん
2006/10/11(水) 12:22:260698デフォルトの名無しさん
2006/10/12(木) 14:38:41Dim 日数 As Integer
Dim 日にち As Integer
Dim シグナル As Integer
For 日数 = 3 To 20
For 日にち = 5 To 30
For シグナル = 5 To 20
なんですけど、やりたいことは、
日数=3の時、日にち=5、6,7,8・・・30
日数=4の時、日にち=5,6,7,8・・・30
・・・・・
日数=20の時、日にち=5,6,7,8・・・30
さらに、
日にち=5の時、シグナル=5,6,7,8・・・20
日にち=6の時、シグナル=5,6,7,8・・・20
日にち=30の時、シグナル=5,6,7,8・・・20
と全通りやりたい場合は、どのように書けばいいのですか?
教えてくださいお願いします。
0699デフォルトの名無しさん
2006/10/12(木) 14:57:130700デフォルトの名無しさん
2006/10/12(木) 15:51:38例えば、
dim 日数 as integer
for 日数 = 3 to 20
で、実際は、日数=3,5,8,101、3,15,18、20
だけをやりたい場合って、どうゆうふうに書けばいいのですか?
教えてください。
0701デフォルトの名無しさん
2006/10/12(木) 19:50:04つーかなんでヘルプ見ないの?
0702デフォルトの名無しさん
2006/10/12(木) 19:57:08for each i in array(3, 5, 8, 10, 13, 15, 18, 20)
とか
for i = 1 to 8
j = roundup(i * 2.5, 0)
とか適当に考えろ
0703デフォルトの名無しさん
2006/10/12(木) 20:47:21現在、エクセルVBAで、CSVデータをエクセルに読み込むプログラムを作りました。
Open "TESTFILE" For Input As #1
Do While Not EOF(1)
Input #1, s
・・・
Loop
Close #1
このような感じで書いて正常稼動していますが、 いまいち遅いです。
Line Input #1, i のように1行ごとに読むと高速なるのはわかりましたが、
なにぶん、改行が不定でうまく読み込めません。
より高速化し、かつ旨く読み込めるアドバイスがあれば勉強になります。
ぜひご助言をお願い致します。
0704デフォルトの名無しさん
2006/10/12(木) 20:58:01Excelの機能で読む。
0705デフォルトの名無しさん
2006/10/12(木) 21:13:54が何なのか気になるのは漏れだけか。
0706デフォルトの名無しさん
2006/10/12(木) 21:21:31レスありがとうございます。
すんませんエクセルのどの機能を使うのでしょうか?
あまり詳しくないもんで、エクセルのオブジェクトを作成して読み込むってことでしょうか?
もう少しヒントを下さるとありがたいです。
0707デフォルトの名無しさん
2006/10/12(木) 21:29:51マクロの記録を開始してから、Excelのファイルメニューからcsvファイルを開け。
0708デフォルトの名無しさん
2006/10/12(木) 22:03:12データが膨大でないのなら全部読み込んでから処理したら。
Const fPath As String = "c:\hoge"
Dim fName As String
fName = "hoge.csv"
Workbooks.OpenText Filename:=fPath & "\" & fName, DataType:=xlDelimited, Comma:=True
(後はお好きなように)
0709703,706
2006/10/13(金) 08:27:06>>707
理解できました。Workbooks.Open Filename:=・・・・ですね勉強になります。
>>708
Workbooks.OpenText Filename:=・・・
見本のコードありがとうございます。勉強になります。
皆さんが指摘されてるように、いったんWorkbooks.OpenやWorkbooks.OpenTextで開いて
その後、加工処理をする方法を試してやってみたいと思います。
レスくれた方々、ありがとうございました。
0710デフォルトの名無しさん
2006/10/13(金) 17:56:58使用ソフト:EXCEL2002
A列、B列、、、F列のそれぞれ2-51行について、共通部分があったら
H列に出力したいんですが、以下を書いたら
Withブロック変数が定義されていないと出てきました。
どうしたらよいでしょうか。
Sub AAA()
Worksheets("sheet1"),activate
Dim isect As Range
Set isect = Application.Intersect(Range("A2:A51"), Range("B2:B51"),
.Range("C2:C51"), Range("D2:D51"), Range("E2:E51"), Range("F2:F51"))
With isect
.Copy Destination:=Worksheets("sheet1").range("H:H")
End With
End Sub
0711デフォルトの名無しさん
2006/10/13(金) 18:12:10そりゃそうだろう。
0712デフォルトの名無しさん
2006/10/13(金) 19:20:20(1)VBAで他のブックのマクロを実行することはできるの
でしょうか。
(2)できる場合、
a)その方法を教えて下さい。
b)実行(処理)終了の待ち合わせ方法を教えて下さい。
c)他のブックは別のPC(同一LANの)上のものでも良い
のでしょうか。
0713デフォルトの名無しさん
2006/10/13(金) 21:06:33(2) a) オープンすれば呼べます
(2) b) 終わるまで戻らないので、待ち合わせる必要がありません
(2) c) よいです
0714デフォルトの名無しさん
2006/10/13(金) 21:07:52アドインとして保存すれば、参照設定をするだけで呼べます。
0715デフォルトの名無しさん
2006/10/13(金) 21:18:01参照設定が必要。
0716デフォルトの名無しさん
2006/10/13(金) 21:30:260717デフォルトの名無しさん
2006/10/13(金) 21:35:050718デフォルトの名無しさん
2006/10/13(金) 22:48:41Application.Intersectメソッドは、共通の(重なっている)セル範囲を抽出するメソッド。
値が同じセルを抽出するものではない。
どういう風に同じになるのか示してくれないと、話が先に進まない。
ちなみに、範囲内で値が全く同じ列を抽出するということであれば、それなりのコードを書く必要がある。
Excel VBAの練習にはいいと思う。
0719712
2006/10/14(土) 09:23:11どうもありがとうございます。
追加質問です。宜しくお願いします。
(1)「参照設定」って何でしょうか。
application.run "book_name!sub_name"と記述することでしょうか?
(2)「アドインとして保存する」ってどういうことでしょうか。
0720デフォルトの名無しさん
2006/10/14(土) 10:21:300721エスパー登場
2006/10/14(土) 12:48:11Sub AAA()
Range("sheet1!H2:H51").FormulaR1C1 = "=IF(AND(RC[-7]=RC[-6],RC[-7]=RC[-5],RC[-7]=RC[-4],RC[-7]=RC[-3],RC[-7]=RC[-2],RC[-7]=RC[-1]),RC[-7],"""")"
End Sub
0722デフォルトの名無しさん
2006/10/14(土) 17:51:10当初の質問の答えは>>717 だから。
あとはググれば出てくる。
>>721
まさにエスパー。
0723デフォルトの名無しさん
2006/10/14(土) 19:48:11まず、以下のようなテキストファイルを読み込み、
2006の前にある数字を取得しExcelのセルに貼り付けたいと考えています。
どう読み込んで良いか、というところからわかりませんので
お教えください。よろしくお願いします。
××××× 2 2006 △△△△△△
□□□ 4 2006 ○○○○○○○
●●●● 1 2006 ◎◎◎◎
0724デフォルトの名無しさん
2006/10/14(土) 19:59:27マクロの記録を開始してから、Excelのファイルメニューからtxt/csv/tsvファイルを開け。
0726デフォルトの名無しさん
2006/10/14(土) 20:19:24注文が多いな。
openしてline inputしてsplitしろ。
0727デフォルトの名無しさん
2006/10/14(土) 20:23:21sub foo()
dim s as string
dim ary() as string
dim r as range
dim i as long
set r = worksheets("sheet1").range("a1")
open "file_name" for input as #1
i = 0
do while not eof(1)
line input #1, s
ary = split(s, " ")
r.offset(i, 0).value = ary(1)
i = i + 1
loop
close #1
end sub
0728デフォルトの名無しさん
2006/10/14(土) 20:27:12基本はある程度できます。エキスパート試験にむけて勉強しようと思っています。
誰かお願いします
0729デフォルトの名無しさん
2006/10/14(土) 20:45:500730デフォルトの名無しさん
2006/10/14(土) 20:55:25けど、唇でされるのもよくね?
0731723
2006/10/14(土) 21:07:01ありがとうございます。
instrしてmidの方が私のやりたいことに合っていると思います。
どういった関数があるのかが、わからないものですから
勉強になりました。
0732デフォルトの名無しさん
2006/10/14(土) 21:24:42さようなら
0733デフォルトの名無しさん
2006/10/14(土) 23:42:12Const srcCol As Long = 2, tarCol As Long = 1
Dim fPath As String, fName As String
Dim wbTarget As Workbook, tarWsIdx As Integer
Set wbTarget = Application.ActiveWorkbook
tarWsIdx = Application.ActiveSheet.Index
fPath = "C:\hoge"
fName = "hoge.txt"
Application.ScreenUpdating = False
Workbooks.OpenText Filename:=fPath & "\" & fName, DataType:=xlDelimited, ConsecutiveDelimiter:=True, Space:=True
Columns(srcCol).Copy Destination:=wbTarget.Worksheets(tarWsIdx).Cells(tarCol)
ActiveWorkbook.Close Savechanges:=False
wbTarget.Worksheets(tarWsIdx).Activate
Application.ScreenUpdating = True
0734デフォルトの名無しさん
2006/10/15(日) 00:35:50set w = activesheet
...
w.activate
の方が好き。
0735デフォルトの名無しさん
2006/10/15(日) 17:22:00ヘルプの見方を教えて下さい。
Rows(x)、Range(y)のx、y部分の記述可能な形式を調べようとして
ヘルプを見たのですが、
オブジェクトのところでRowsもRangeも見つかりませんでした。
プロパティのところではValueが、メソッドのところではSelectが
見つかりません。どこを見れば載っているのでしょうか。
0736デフォルトの名無しさん
2006/10/15(日) 18:19:24Selectもメソッドの中にあった。
0737735
2006/10/15(日) 19:30:39レスありがとうございます。
VisualBasicのヘルプ→目次→ランゲージリファレンス→プロパテイで
出て来ないのですが、見方が違うのでしょうか。
0738デフォルトの名無しさん
2006/10/15(日) 19:59:47キーワードで検索してみそ。
0739デフォルトの名無しさん
2006/10/15(日) 20:08:41カーソル合わせてF1でヘルプ開けば一発で出ないか?
0740デフォルトの名無しさん
2006/10/15(日) 20:13:16Excelのヘルプの目次からMicrosoft Excel Visual Basicリファレンスとかいう項目があると思う。その下。
2000でもそんな感じだったはずだから、2002でもそうだと思う。
0741デフォルトの名無しさん
2006/10/16(月) 12:29:27自動的に該当引数に値をセットしたいですが、
どうすればいいでしょう??
確か、引数の値or参照や型定義のときに
一緒にやったような気がするんですが・・・。
0742デフォルトの名無しさん
2006/10/16(月) 12:48:50MsgBox Arg
End Sub
0743737
2006/10/16(月) 18:53:14レスありがとうございました。
F1押したら「ヘルプがインストールされてない」と出てきました。
EXCELをインストールしなおします。
0744デフォルトの名無しさん
2006/10/16(月) 21:45:172chだけじゃなくてまずは、VBA・初心者とかのキーワードでググりなさい
ヘルプのインストールの事等は基本だよ
0745デフォルトの名無しさん
2006/10/17(火) 00:22:50VBAでC++のMap型やvector型のような変数はありますか?
ちょっと検索してみたのですがないっぽい感じですよね?
代用できる変数見たいのでも構いませんので
ご存知の方よろしくお願いします
0746デフォルトの名無しさん
2006/10/17(火) 00:39:07variantかな・・
0747デフォルトの名無しさん
2006/10/17(火) 00:47:260748デフォルトの名無しさん
2006/10/17(火) 09:02:51どうすれば良いのでしょうか
0749デフォルトの名無しさん
2006/10/17(火) 09:45:13ChartObjectsに対してFor Eachループ回してDelete
0750デフォルトの名無しさん
2006/10/17(火) 10:25:38COLORINDEX=39の色のセルがどこかを
メッセージボックスに書き出すということに
取り組んでいます
ググッてみて、いろいろ出てきたのですが、
公開されているプログラムだと、条件付き書式でつけた色を認識せず
COLORINDEX=2と判断してしまいます
何か対処法はありませんか?
0751デフォルトの名無しさん
2006/10/17(火) 10:36:390752750
2006/10/17(火) 11:13:11そうですね。すみません。
色の識別をするのに、
Function CellColor(セル)
CellColor = セル.Interior.ColorIndex
End Function
というマクロを標準モジュールに書いて、
=CellColor(A1)
という式をセルに書いて色番号を書き出すというものです。
この一連の作業を行うと、指定したセルの色として、
COLORINDEX=2という風に出てきてしまいます。
0754デフォルトの名無しさん
2006/10/17(火) 12:06:40全く条件付き書式を考慮してないじゃん。
少しは条件付き書式で設定した色を取得するために
努力をした形跡が見られるコードを期待していたんだが、
形跡どころか欠片も見つからねぇw
君、やる気あるの?つーかこっちの教える気が無くなった。
努力せず丸投げで教えて貰おうって根性の奴には
丸投げ大好きピエロがいるからそいつに教わってくれ。
0755デフォルトの名無しさん
2006/10/17(火) 12:31:33If Not ActiveSheet.ChartObjects Is Nothing Then ActiveSheet.ChartObjects.Delete
0756デフォルトの名無しさん
2006/10/17(火) 12:47:48まずはヘルプをFormatConditionsで検索だ。
0757デフォルトの名無しさん
2006/10/17(火) 18:08:23VBGenericというものを聞いたことがある。
使ったことはないから使い心地はわからないが。
0758デフォルトの名無しさん
2006/10/17(火) 23:32:03VBAからtelnetでUNIXサーバに接続して、コマンドを実行する方法はありますか?
現状、Shellでバッチファイルを叩いてみましたが、うまくいきませんでした。
ご存じの方がいらっしゃったら、教えていただけないでしょうか?
0759デフォルトの名無しさん
2006/10/17(火) 23:37:300760デフォルトの名無しさん
2006/10/17(火) 23:39:53VisualBasic for Applicationは、Application(Word、Excel、Accessなど)を操作して
始めてVBAだよ。それ以外はApplication(Word、Excel、Accessなど)付属の
VBE(Visual Basic Editor)を利用したとしても、通常のVB分野の話。
ということでVB6スレへどうぞ。
0761デフォルトの名無しさん
2006/10/17(火) 23:42:510762デフォルトの名無しさん
2006/10/17(火) 23:45:56telnetの場合は、必ずユーザ名とパスワードの入力を要求される。
rshかsshを使うべし。
あと、VBAのShell関数は必ず「非同期」で実行されるから、
サーバからの出力を受け取る必要がある場合は、
コマンドの同期実行が可能なWSHのWScriptオブジェクトのShellメソッドを使うのが吉。
0763デフォルトの名無しさん
2006/10/18(水) 03:53:200764デフォルトの名無しさん
2006/10/18(水) 04:47:490765748
2006/10/18(水) 07:56:11どうもありがとうございました。
0766デフォルトの名無しさん
2006/10/18(水) 18:58:370767デフォルトの名無しさん
2006/10/18(水) 19:14:44嫌な人生なんです。
0768デフォルトの名無しさん
2006/10/18(水) 19:18:36VBA自体は正確には言語そのものでは無い。
0769デフォルトの名無しさん
2006/10/18(水) 22:56:34どうしたらよいのでしょうか。
ウインドウもでておらず、タスクトレイに表示されているだけのプロセスです。
0770デフォルトの名無しさん
2006/10/19(木) 00:38:09TaskList.VBS
でググる。
0772デフォルトの名無しさん
2006/10/19(木) 07:55:49セルをクリックした時に起動されるVBAマクロの記述の仕方と
クリックされたセルの位置(行、列)の入手方法を教えて下さい。
0773デフォルトの名無しさん
2006/10/19(木) 08:15:29Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox Target.Address(0, 0)
End Sub
但しこれはイベント名を見ても解るとおり、選択セルの変更で発生するイベントなので
マウスでセルをクリックして選択セルを変更した時だけではなく、キーボード操作の場合も発生する。
さらには現在の選択(アクティブ)セルを再度クリックしても発生しない。
Worksheet_Clickイベントは無いからそういうのが都合悪いなら、シート上にボタンを配置しな。
0774デフォルトの名無しさん
2006/10/19(木) 11:21:360775772
2006/10/19(木) 14:05:35どうもありがとうございます。
0776デフォルトの名無しさん
2006/10/21(土) 12:31:04(つまりGrepのようなものです)
EXCELシートに抽出する処理を行いたいです。
単純にテキストファイルの全行をシートに抽出する処理の記述法は知っているのですが、
変数に格納した各行内で抽出キーワードに合致した部分だけを取り出す方法というのがわかりません。
どなたかご教授頂けないでしょうか?
0777デフォルトの名無しさん
2006/10/21(土) 12:33:22正規表現使え。
VBAでの正規表現の使い方はググれ。
0778デフォルトの名無しさん
2006/10/21(土) 12:37:000779デフォルトの名無しさん
2006/10/21(土) 12:52:44使うまでもないから使わないってのは、余計なコストが掛かる場合の理論
コストが掛からないなら、使うまでもないところで使ったって何の問題もない
そして正規表現は、労力面、金銭面、導入面全てに置いてほとんどor全くコストが掛からない
0780776
2006/10/21(土) 13:00:28レスありがとうございます。
EXCEL VBAでの正規表現の使用法は自分で調べます。
もう1点質問なのですが、EXCEL VBAでファイル名(例えば「sakura.exe」という文字列)から
拡張子を除いた部分だけを切り出す方法はありますでしょうか?
LEFT、RIGHT、MID関数を組み合わせても上手く行きません。
よろしくお願いします。
0781776
2006/10/21(土) 13:02:32「sakura.exe.bak」であれば「sakura.exe」として抽出したいです。
よろしくお願いします。
0782デフォルトの名無しさん
2006/10/21(土) 13:04:21LeftとLen使うべし
0783776
2006/10/21(土) 13:12:06すいません。まだよくわかりません。
例も良くなかったです。すいません。
拡張子の長さは3文字固定とは限らない前提です。
「sakura.exe.manifest」→「sakura.exe」
0784776
2006/10/21(土) 13:49:55どうもありがとうございました。
Dim 拡張子あり As String
Dim 拡張子なし As String
拡張子あり = "sakura.exe.manifest"
FileName = Dir(FullPath) 'フォルダ名を除いたファイル名を取得(=User32.dll)
If InStr(1, FileName, ".") > 0 Then
'拡張子がある場合は、拡張子を省く
拡張子なし = Left(File拡張子なしName, InStrRev(拡張子なし, ".") - 1)
End If
0785776
2006/10/21(土) 13:51:27Dim 拡張子あり As String
Dim 拡張子なし As String
拡張子あり = "sakura.exe.manifest"
If InStr(1, 拡張子あり, ".") > 0 Then
'拡張子がある場合は、拡張子を省く
拡張子なし = Left(拡張子あり, InStrRev(拡張子あり, ".") - 1)
End If
0786デフォルトの名無しさん
2006/10/21(土) 15:00:16つ InStr関数
0787デフォルトの名無しさん
2006/10/21(土) 15:23:27Set fso = CreateObject("Scripting.FileSystemObject")
GetTheBase = fso.GetBaseName(filespec)
導入コストはかからないからお勧め!!
0788デフォルトの名無しさん
2006/10/21(土) 18:56:290789デフォルトの名無しさん
2006/10/22(日) 13:15:230790デフォルトの名無しさん
2006/10/22(日) 15:28:37ListBoxコントロールの背景色(ListBox.BackColor)を変更すると、
ListBoxの選択中の表示(背景色が強調されたり、選択枠で囲まれ
たり)が消えてしまうんですが、これをさせないようにするには、
どうしたらいいんでしょう。ListBox.ListIndexは、選択された値
がそのまま維持されているんですが。再設定してみても、選択さ
れないですし。(ListBox.ListBoxIndex を一度別の値に設定して、
再設定すると表示されるみたいですが、これもちょっと…)
初歩的な質問ですみません。
0791デフォルトの名無しさん
2006/10/22(日) 20:49:33もしくは、下へ移動したいんですけど、いい方法を教えてくだされ。
0792デフォルトの名無しさん
2006/10/22(日) 21:13:19Excelで手操作するのと同じ動作でしょ?
マクロ記録モードにして
マウスで行切り取りして
コピーした行を挿入ってやって
記録モード止めてからマクロを見ればいいじゃない
0793デフォルトの名無しさん
2006/10/22(日) 21:26:310794デフォルトの名無しさん
2006/10/22(日) 21:38:203行目のセルを切りとる → 2行目のセルに挿入 というコードになってしまいますた。(´・ω・`)ショボーン
上のセルに挿入というコードにしたいのですが、ご教授を('A`)
0795デフォルトの名無しさん
2006/10/22(日) 21:47:50VBAはOffice製品で使えるプログラミング言語とありますが、
使い方や、データ型など、は変わらないのですか?
MySQLとSQL Server ではデータ型が違っていたりしますが・・。
0796デフォルトの名無しさん
2006/10/22(日) 22:15:37つ 相対
>>795
構文規則はたぶん100%互換
型もたぶん100%互換
組み込みの関数やステートメントは95%互換くらいかな
組み込みのグローバルオブジェクトは全然違う
ユーザーフォームも結構違う
0797デフォルトの名無しさん
2006/10/22(日) 22:48:39どうもありがとうございます。
参考になりました。
0798デフォルトの名無しさん
2006/10/24(火) 00:24:21色々やってみたが確かにうまくいかない。
唯一うまくいったのが下記。(動作確認はExcel 2000だが。)
myIndex = .ListIndex
.Selected(myIndex) = False' 一旦外す
.Selected(myIndex) = True
しかし何のために背景色を途中で変えるのだろう…
0799デフォルトの名無しさん
2006/10/24(火) 06:45:04自己満足の処理はいらねぇよなぁ
0800デフォルトの名無しさん
2006/10/24(火) 08:09:110801デフォルトの名無しさん
2006/10/24(火) 23:00:100802デフォルトの名無しさん
2006/10/24(火) 23:11:030803デフォルトの名無しさん
2006/10/24(火) 23:37:160804デフォルトの名無しさん
2006/10/25(水) 21:06:28ありがとうございます。true→falseでもできますか。
そっちの方がいいかも。
背景色を変えたい理由は、今、テキストボックスのに
リストボックスから選択した内容を挿入しながら編集
するフォームを作っているですが、実際に使ってみる
と、タブとかで頻繁にリストボックス←→テキスト
ボックスを移動するんで、今どこにいるかわからなく
なるんです。で、みれば一発でわかるように現在Focus
がいるコントロールの背景色を変えたんですが…
0805デフォルトの名無しさん
2006/10/26(木) 20:29:45動的配列で格納した数字を全部足した場合はどうしたらいいんですか?
0806805
2006/10/26(木) 20:36:34XPのエクセル2003です。
0807デフォルトの名無しさん
2006/10/26(木) 21:00:14UBOUND?
0808805
2006/10/26(木) 21:15:17配列数ではなく、配列に格納した数字を全部足したいんです。
例えば
a(1)=126
a(2)=769
a(3)=321
であれば、単純にa(1)+a(2)+a(3)と出来るのですが・・・
配列数が未定なものはどうしたらいいんでしょうか?
0809デフォルトの名無しさん
2006/10/26(木) 21:33:31for 変数= Lbound(配列) to Ubound(配列)
じゃダメなの?状況をもう少しkwsk
0810805
2006/10/26(木) 21:52:54仕事現場にプログラムを置いてあるんで、コードはうつせませんが、
例えば、静的配列で配列に格納した数字を全部足したい場合は
a(0)=126
a(1)=769
a(2)=321
NUM=a(0)+a(1)+a(2)
でできますが、
動的配列だと
a(0)
.
.
a(i)
NUM=a(0)+・・・・a(i)
となるとおもいます。
a(i)の最大配列数はUboundで出せて、おっしゃる通りfor〜toを使えますが、
いざ格納された数字を全部足そうと思うとどうやったらいいかわかんなくて。。
NUMの変数定義でstaticを使ってもダメそうで。。
0811デフォルトの名無しさん
2006/10/26(木) 22:03:300812デフォルトの名無しさん
2006/10/26(木) 22:04:29この時点で唖然とする。
0813809
2006/10/26(木) 22:06:06他の人バトンタッチ....
0814805
2006/10/26(木) 22:06:202日前にプログラム始めたばかりでして^^:
他に何かやり方があるんですか?
0815デフォルトの名無しさん
2006/10/26(木) 22:14:583次方程式の解を求めるプログラミングはどのようにして作れば
いいんですか?
0816デフォルトの名無しさん
2006/10/26(木) 22:15:54ループを利用した加算を理解しる
0817デフォルトの名無しさん
2006/10/26(木) 22:22:07どうって・・ループと条件式でアルゴリズムを具体化してみそ
0818805
2006/10/26(木) 22:24:07ちょっとわかんないんで、コード教えていただけますか?
0819デフォルトの名無しさん
2006/10/26(木) 22:27:20for a=1 to 5
c=c+b(a)
next a
例えばこれを理解してみて
0820809
2006/10/26(木) 22:28:05Sum = Sum + a(i)
next i
基本すぎてなんか自信ないよ。
0822819
2006/10/26(木) 22:42:15b=WorksheetFunction.Sum(a)
とか一行でも書けるけどな
0823デフォルトの名無しさん
2006/10/28(土) 08:16:370825デフォルトの名無しさん
2006/10/29(日) 00:26:24For i=0 to UBound(buffer)-1
sum=sum+buf(i)
next
以外のパターンって使ってないな。
For each inとかlboundとか一度も使ったことないし。
While文ですらろくに使わない。Do Whileなんて、何それだしなぁ。
われながら、PG能力が低いな。
0826デフォルトの名無しさん
2006/10/29(日) 01:47:510827デフォルトの名無しさん
2006/10/29(日) 03:43:36私は英訳等をする機会が多いのですが、
分からない単語が出てくるたびにマウスで単語を
辞書サイトにコピーペーストし、検索ボタンを押しています。
(もしくは単語コピー→Alt+Tabでブラウザ⇔Word切り替え→ペースト検索)
この作業をマクロを使う感じでショートカットキー一つで出来る、もしくは
コンテキストメニュー(右クリックメニュー?)に追加して労力を減らせれば
非常に便利だと思うのですが、マクロ化するようなことは出来ないのでしょうか?
以下に行いたい処理の流れをかきます。
1:実行中のWordで調べたい単語を選択している状態からスタート
2:マクロを実行すると、選択している単語をアルクの辞書サイトで検索
3:画面の表示をインターネットブラウザへ移して検索結果を表示
これに加えて、できれば一回一回開きなおすのでなく、一度以上検索を行っている場合には
その窓で検索を行うような形に・・・
参考になるアドレスや似たようなマクロ持っている方などおられましたら助けていただけないでしょうか?
尚、ここへ来る前にWord総合質問スレにて質問させていただきましたが、
畑違いかと思いましてこちらで質問させていただいています。
詳しい方いらっしゃいましたらよろしくお願いします。
0828デフォルトの名無しさん
2006/10/29(日) 04:57:25昔使ってた辞書ソフトとか翻訳ソフトに
画面上の英単語にマウスカーソルを当てるだけで
訳をウィンドウ表示する機能があったけど、
そーゆうのではダメですか?
0829デフォルトの名無しさん
2006/10/29(日) 10:59:32クリップボード監視してBookshelf(昔のオフィス付属の辞書ソフト)を引くプログラムを
VBで書いたことがあるので、ショートカットキーならもっと簡単だと思う。
Web上の辞書なら、あらかじめある単語を引いた結果画面の
アドレスのどこに選択した単語が含まれているかを調べて(&word=hogeみたいに)
その部分を置き換えたURIを作ってブラウザを開けば良いだけ。
>>828
代表的な物としては「ロボワード」とかね
最近だと「本格翻訳5」(開発NEC,販売ソースネクスト)の1980円の奴でもできるけど
ttp://www.sourcenext.com/titles/use/72400/
0830827
2006/10/29(日) 11:41:30ありがとうございます。辞書ソフトや、翻訳ソフトを所持していないので
ちょっと想像がつかないです・・・。もう少し調べてみます。
>>829
ありがとうございます。
>Web上の辞書なら、あらかじめある単語を引いた結果画面の
>アドレスのどこに選択した単語が含まれているかを調べて(&word=hogeみたいに)
>その部分を置き換えたURIを作ってブラウザを開けば良いだけ。
私もそういう動作をさせられればいいなと思っていました。Wordを実行中に
Wordのショートカットキーから作成したプログラム(プラグイン?)を動かす
ような動作が可能なのでしょうか?
マクロでこのような動作を行うのは難しく、プログラムを作成する必要がある、
と考えた方がよいのでしょうか?
本格翻訳5見てきました。ワードのプラグインとして使えて便利そうです。
0831827
2006/10/29(日) 15:23:16以下のようなマクロにまとめてみました。コードを張ってよいものか分かりませんが
失礼します。
Sub 検索野郎男塾()
Dim word As String
Dim address1 As String
Dim address2 As String
Dim address3 As String
'選択中の文字列を取得
selectedword = Selection.Text
' address1:アドレス前半部 address2:アドレス後半部 address3:選択中の文字列と結合
webaddress1 = "http://www2.alc.co.jp/ejr/index.php?word_in="
webaddress2 = "&word_in2=なんてらかんてら&word_in3=なんてらかんてら"
webaddress3 = webaddress1 + selectedword + webaddress2
With CreateObject("InternetExplorer.Application")
.Navigate webaddress3
.Width = 1024
.Height = 768
.Top = 0
.Left = 0
.ToolBar = True
.MenuBar = True
While .Busy: Wend
While .Document.ReadyState <> "complete": Wend
.Visible = True
End With
End Sub
0832827
2006/10/29(日) 15:31:591.Word中で文字列を選択
2.Word中で上記マクロ実行
3.IEが起動し、希望のページの表示が行われる。
と、大体希望通りの動きをしています。
ただ、検索を2度3度と繰り返しますと当然かもしれませんがIE窓が2個3個・・・と
増えていってしまっています。
IEが開いているかどうかチェックして、開いていれば同じ窓で該当アドレスを開く、
といった動作にするためのヒントをご存知の方いらっしゃいましたらいただけないでしょうか?
漠然と、
「多分IEが開いてるかどうかを示すパラメータのような物があるだろうから、それを取得して分岐してやればいい」
と素人なりに考えてはみたのですが、ヒントや改善点などなどありましたら指摘していただけると助かります。
0833デフォルトの名無しさん
2006/10/29(日) 15:42:14動的配列だと、配列がa(4)からa(10)とか、極端な話飛び飛びに
なっていることもあるし。まあ、レアケースではあるけど。
0834827
2006/10/29(日) 18:10:15ほとんどリンク先のソースの改変なのでマクロのコードは貼りません。
(ほんとは見て頂いて直していただければ最高なのですが・・・)
皆様どうもありがとうございました。
TypeNameとShell.Applicationを使い起動済みのIEを探す
ttp://www.ken3.org/vba/backno/vba156.html
0835デフォルトの名無しさん
2006/10/29(日) 21:27:52エクセルでコンボボックスを使ってデータ管理したいのですが
コンボボックスを同じ行で一つずつ作りたいんですが
設定する時に一つ一つしなければならないのでしょうか?
0836デフォルトの名無しさん
2006/10/29(日) 21:52:03具体的に
無駄な行間開けずに
お願いします
0837デフォルトの名無しさん
2006/10/29(日) 22:12:08ShellExecuteでURL指定すれば、適当にIEのウィンドウを使いまわさなかったっけ?
0838デフォルトの名無しさん
2006/10/31(火) 18:12:282.作成された「Sheet2」に表1がコピーされる。
3.コピーされた「Sheet2」で、点数が70点未満の者は、背景が赤色に変更される。
という問題で、シート2への転記はできた。
けど、70点未満の人間の背景を赤色に変更することができないんです><
一人ずつ点数を判別していくとなると、莫大な労力を要するので、どうにかなりませんかね?
0839デフォルトの名無しさん
2006/10/31(火) 18:16:11そうなるのは、インターネットオプションの詳細設定で、
「ショートカットの起動にウィンドウを再利用する」が設定されているときだけだと思う。
0840デフォルトの名無しさん
2006/10/31(火) 19:20:22履修不足
0841デフォルトの名無しさん
2006/10/31(火) 19:36:47自分で自分のレスを読み返してみろ。
その文で他人に状況が伝わるとでも?
0842デフォルトの名無しさん
2006/10/31(火) 21:16:500843デフォルトの名無しさん
2006/10/31(火) 21:56:48Sheet2って何?新規ワークシートの名前?
表1って何?どこにあるの?
70点未満の人間の背景を赤色ってどうやるんだ?できるならこっちが教えてほしいわ
70点未満の点数が表示されているセルの背景のことか?表1には名前と点数がセットになってるのか?
判別はループ内ですれ
0844デフォルトの名無しさん
2006/10/31(火) 22:18:49End sub
0845デフォルトの名無しさん
2006/10/31(火) 22:47:16労力ってVBA書く労力か?一行でかけるぞ
0846デフォルトの名無しさん
2006/10/31(火) 23:30:51一つの列について、特定の(複数の)文字があれば、その文字があるセルを色づけし、
特定の(複数の)文字がなければその行を削除する、というVBAを作りたいのですが
上手くいきません。
Sub tes()
Range("B3").Select
Do Until Selection.Value = "おわり" ’おわりセルまでループさせる’
If Selection.Value = "#001" Or "#003" Or "#005" Then
Selection.Interior.ColorIndex = 37 ’アクティブセルが#001か#003か#005であればセルの背景色を37に’
Else
Selection.EntireRow.Delete ’それ以外は行ごと削除’
End If
Selection.Offset(1, 0).Select
Loop
End sub
マクロが全く動かずに "#001" Or "#003" Or "#005"のところがエラーだと出てしまいます。
実際のところ、特定の文字列は1500個ほどあります。何とか上手くいく方法は無いでしょうか?
(もちろん実験のため3個の文字列でも実行しましたがエラーでした。1個だと上手くいきます)
0847デフォルトの名無しさん
2006/10/31(火) 23:37:34〜value="#001" or 〜value = "#002" or 〜value ="#003"
とかで試してみてください。
0848デフォルトの名無しさん
2006/10/31(火) 23:39:21or の使いかたがまずいと思う
めんどうだが全て式にしてor でくぎる
だが、実際1500あるならそれじゃ大変すぎ
0849デフォルトの名無しさん
2006/10/31(火) 23:49:22少ないサンプルで実験したら、それで何とかできそうです!!
ありがとうございましたm(^^)m
>848
式はメンドイですけど、これもエクセルの&で乗り切ります・・
出来るかなぁ。。
0850デフォルトの名無しさん
2006/10/31(火) 23:52:38条件が1500個というのを見落としていました。
とりあえず簡単(分かりやすい)なのは
条件を入れる列を用意してあげて一個ずつ比較する事かな?
例えばD列に条件をずらーっと並べて(D1="#001",D2="#003"・・・D1300="#923")
int_row=3
Do while cells(int_row,2).value="尾張"
bln_check=false
for int_comp = 1 to 1500
if cells(int_row,2) = cells(int_comp,4) then
cells(int_row,2).interior.colorindex =37
bln_check=true
exit for
end if
next int_comp
if not(bln_check) then cells(int_row,2).EntireRow.delete
int_row=int_row+1
Loop
こんなイメージ。
適当に書いただけ。
当然これだと条件に当てはまらなかったときに
条件の入った行まで消してしまうのでD列を別シートに移動する等しなくちゃいけない。
つづく?
0851847,850
2006/10/31(火) 23:57:17バグだらけだ、コレ。
行消しちゃうと不具合が...
>if not(bln_check) then cells(int_row,2).EntireRow.delete
>int_row=int_row+1
一行飛ばしちゃうね。
しかし汚いコードだ..
0852846
2006/11/01(水) 00:12:02解決したかと思ったのですが出来ませんでした・・・。Selection.Value = "#001”を横に並列
させようとしたんですが、30式ほどで横幅の限界まで直ぐに到達して無理に。
縦に縦列させたところ、
If Selection.Value = "#001"
Or Selection.Value = "T2531"
Or Selection.Value = "T2536"
Or Selection.Value = "T2536"
Or Selection.Value = "T2572"
Or Selection.Value = "T2576" Then
↑のように、上の文字列が赤くなりエラーがでてしまいました。
>850はD列に条件を入れて、そこを参照にさせるということですか???
自分にはちょっと無理そうなので、もう少し詳しく教えていただけませんか?
0853デフォルトの名無しさん
2006/11/01(水) 00:18:58WorksheetFunction.Findとかで検索して、
ヒットしたら色、エラーなら消しってのでもいけると思う
コードはめんどうだからカンベンw
何にしてもどこかのシートの列とかに特定文字を羅列したほうがいいよ。
コードにひとつひとつ書くのはやめれw
0854847,850
2006/11/01(水) 00:21:13俺にさらに恥を晒させる気ですか、そうですか。
D列に〜と書いたのはVBEで条件を1500個書くよりもシートに直接記述したほうが楽かな、
と思っただけです。
ちなみに縦に縦列させるのは
If Selection.Value = "#001" _
Or Selection.Value = "T2531" _
Or Selection.Value = "T2536" then
というように行の最期に「 _」をつければOKです。
0855846
2006/11/01(水) 00:35:18なにとぞ願いできないでしょうか?
「 _ 」ですが、数十個でも『「 _ 」を使いすぎています』というエラーメッセージが
出てきて無理でした・・。
0856デフォルトの名無しさん
2006/11/01(水) 00:43:21おまいの1500個書こうという根性には感心したw
0857847,850
2006/11/01(水) 00:46:44シート2のD列に条件を列挙
そして再びシート1を選択して以下のコードを実行
Sub test5()
Dim int_row, int_comp,bln_check '変数を定義する
int_row=3 '三行目から開始
Do while cells(int_row,2).value="おわり" '(int_row)行目の左から二個目のセル(B列)が"おわり"になるまで
bln_check=false 'チェック(フラグ,印)をリセット
for int_comp = 1 to 1500 'int_compを1から1500まで一個ずつ変動させる
if cells(int_row,2) = Worksheets(2).cells(int_comp,4) then 'int_row行目のB列とシート2のint_comp行D列を比較
cells(int_row,2).interior.colorindex =37
bln_check=true '該当したものがあったらチェックする
exit for
end if
next int_comp 'ここまできたらint_compを1増やしてfor〜の次へループ
if bln_check=true then 'チェックしてあったら
int_row=int_row+1 'int_rowの値を1増やす(次の行を見る準備)
else 'ちぇっくが無かったら
cells(int_row,2).EntireRow.delete 'その行を消す(下の行が繰り上がるのでint_rowはそのまま)
end if
Loop '先頭にループ
end sub
できるだけ初心者っぽいコードに仕立ててみました(逃げ)
と、ここまで書いて不安になったんだが「変数って何ですか」ってレベルじゃないよね?
0858847,850
2006/11/01(水) 01:12:32動いたのは動いたが当然遅い..フリーズしたかと思った。
解決1:残った行は全て色が残るわけだから逆に色づけは最期にまとめて行う(△)
解決2:条件を一度配列にぶち込む(○)
解決3:データ行、条件行両方をソートしてからうまい事...(○)
解決4:条件に法則性があるならそれを利用して場合わけ。(◎)
これくらいかなぁ...
まぁ、どちらにせよ条件を1500個も打ち込む時間に比べたら屁みたいなもんだろうけど。
、という事でそろそろ恥さらしは終わりにします。スレ汚しスマソ
0859デフォルトの名無しさん
2006/11/01(水) 03:40:27>>846
具体的にどういう文字列なのか晒せるなら晒してみて。
いくつかのレスにあるように、文字列に規則性があれば、簡単かつ高速になる可能性がある。
規則性があまりないなら、メインテナンス性を考えて、別のシートに1セル1文字列で入れておいたら。
文字の連接は、ある文字列(外れ)が他の文字列(当たり)の一部である場合に工夫が必要になる。
いくつか方法はあるが、お勧めはMatchだな。
0860846
2006/11/01(水) 04:03:23ありがとうございます!!変数はまだ良く解りませんが、何とかできてる感じです。
深夜までお付き合いありがとうございますm(-_-)m
>859
T4031
T4041
T4042
T4043
T4044
T4046
T4047
T4061
T4062
T4063
T4064
T4078
T4088
T4091
T4092
T4095
T4097
T4099
T4100
上みたいな感じで規則性は皆無です。
0861デフォルトの名無しさん
2006/11/01(水) 10:07:07いや・・それ規則性あるほうだよ。
Sub test() 'match使用の一例
Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Worksheets(1)
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Worksheets(2)
Dim y1 As Long: y1 = ws1.Cells(65536, 1).End(xlUp).Row
Dim y2 As Long: y2 = ws2.Cells(65536, 1).End(xlUp).Row
Dim rr1 As Range: Set rr1 = ws1.Range("A1:A" & y1)
Dim rr2 As Range: Set rr2 = ws2.Range("A1:A" & y2)
Dim r As Range, a As Long
On Error Resume Next
For Each r In rr1
a = 0
a = WorksheetFunction.Match(r.Value, rr2)
If a = 0 Then
ws1.Rows(r.Row).Clear
Else
ws1.Rows(r.Row).Interior.ColorIndex = 6
End If
Next r
ws1.Cells.Sort key1:=Range("A1")
End Sub
'Sheet1-A列-10,000件のデータ Sheet2-A列-1500個の特定文字をセット
'mypcで25秒、Application.ScreenUpdating = Falseで13秒くらいか一例にしてみて
0862デフォルトの名無しさん
2006/11/01(水) 12:46:37ものだけ残す」ということであれば、削るのではなくて抽出することを考えた方が先々泣きを見な
くて済むかも。マクロの間違いで消してしまって青ざめることも良くあるからな。
スキルの向上にもつながる。
0863デフォルトの名無しさん
2006/11/01(水) 17:43:16テキストボックスに文字を入力し、コマンドボタンを押すと、
A1にその入力した文字が出力されるようにしたいのです。
ただ、それだけなら、
Private Sub CommandButton1_Click()
If txtbox <> "" Then
If textbox <> IsNumeric(txtbox) Then
Cells(1, 1) = txtbox
Else
MsgBox "文字で入力して下さい", vbCritical
End If
Else
MsgBox "何か入力して下さい", vbCritical
End If
End Sub
と解答はできたのですが、テキストボックスに文字を新たに入力し、
A2,A3,A4…とA1以下のセルに順次新しく入力内容が表示されるようにしたいのですが、
どうしたらいいでしょうか?
0864デフォルトの名無しさん
2006/11/01(水) 17:48:01Private Sub CommandButton1_Click()
If txtbox <> "" Then
If textbox <> IsNumeric(txtbox) Then
Cells(1, 1) = txtbox
Else
MsgBox "文字で入力して下さい", vbCritical
End If
Else
MsgBox "何か入力して下さい", vbCritical
End If
End Sub
0865デフォルトの名無しさん
2006/11/01(水) 17:49:00>If textbox <> IsNumeric(txtbox) Then
そもそもココ大丈夫?
あとは>>846を応用すればおk
0866デフォルトの名無しさん
2006/11/01(水) 17:59:09スマセン、重要なヒントがすぐ上にありましたね。
なにぶんてんぱり過ぎてて、余裕がなかった。
ただ、VBA初心者向けのスレもないんで、
ここで宿題っぽい質問をしてしまうのは仕方ないとは思うんですが。
0867デフォルトの名無しさん
2006/11/01(水) 18:49:18キーボード操作(マクロ→実行のような)で、パラメータを指定して
実行する方法があれば、教えて下さい。
0868デフォルトの名無しさん
2006/11/01(水) 19:06:02bbb inputbox()
end sub
0869デフォルトの名無しさん
2006/11/01(水) 19:51:53Call を使用したくないのは何故?
アーギュメントは一定なのか?
または、いつどこで決定される?
0870デフォルトの名無しさん
2006/11/01(水) 23:43:11VBEのウォッチウインドウと実行中のフォームって一画面中に並べて表示させることって可能ですか?
フォーム実行中の変数の値を画面を切り替える事無く追いたいのです。
0871デフォルトの名無しさん
2006/11/02(木) 01:22:430873デフォルトの名無しさん
2006/11/02(木) 12:37:47>考えも尽きませんでした。
思考の無限ループという感じがしてワロタ。
0875デフォルトの名無しさん
2006/11/02(木) 21:51:480876867
2006/11/03(金) 10:50:39レスありがとうございます。
実行時にパラメータを与えたいためです。
マクロのソースを修正して実行すれば良いことですが、
できれば、実行指示の操作をキーボートから行う時に
パラメータで指定できればと思って、
質問しました。
0877デフォルトの名無しさん
2006/11/03(金) 11:16:53ってことは放置でいいか。
0878デフォルトの名無しさん
2006/11/03(金) 11:42:27まあ、なんとなくわかった。
キーボードで、パラメータ入力→マクロショートカットキー実行
てな感じで実行したいわけかな?
単にマクロにinputboxでも仕込むとか、実行後にユーザーに問えば良い気がするけど
どんなマクロを想定してるのか
0879デフォルトの名無しさん
2006/11/03(金) 22:01:27そこから呼び出せばよいのでは?
ちょっと強引だけど
空ユーザーフォーム作ってKeypressとかでキー受け取って。
0880デフォルトの名無しさん
2006/11/04(土) 01:20:46セルを選択した状態でこのマクロを動かすとエラーが出てしまいます。
マクロの頭に「もし図を選択しているなら」と条件をつけたいのですが、
どのように書けばいいのでしょうか?
0881デフォルトの名無しさん
2006/11/04(土) 08:34:13図は特定のものでしょうか?また、エラーが出るのは.selected等を使ってるから?
もう少し詳しく書いてくれたほうがうれしいです
0882876
2006/11/04(土) 18:39:57レスありがとうございます。
キーボードからパラメータ与えるのはできないようですね。
0883デフォルトの名無しさん
2006/11/04(土) 19:18:160884880
2006/11/04(土) 20:46:26マクロスタート時に"図を選択していること"を前提にしているので、
マクロの頭は「ttt=Selection.Top」や「nnn=Selection.Name」など
選択している図の位置やサイズ・名前を取得するようなものから始まっています。
エラーは図ではなくセルを選択した状態でこのマクロを動かしたときに起こるもので、
「nnn=Selection.Name」と名前を取得しようとするところでエラーが出てしまいます。
なので、マクロの頭に「もし図を選択しているなら以下の動作を・・・」という条件をつけて
セルを選択した状態では動かないようにしたいと考えています。
0885デフォルトの名無しさん
2006/11/04(土) 21:10:52テーブルにフィールドを追加したんですが
フィールドリストにはでてるんですが、VBAではエラーになります
分かる方お願いします
0886デフォルトの名無しさん
2006/11/04(土) 22:52:560887デフォルトの名無しさん
2006/11/04(土) 23:31:12ここはプログラム開発言語Visual Basic、Visual Basic.NETシリーズのスレではなく
Officeアプリケーションのマクロ言語VisualBasic for Applicationのスレ
0888886
2006/11/05(日) 01:35:460889デフォルトの名無しさん
2006/11/05(日) 07:19:02本当にその質問でわかる人がいると思ってるのか?w
あんたの言うフィールドリストとはなんぞや?
テーブルのデザイン画面?
それなら当然追加したから見えるわけだ。
つまり問題はVBAのコードに問題があるわけだが
そのコードはあんたにしか読めない。
清田君はもういないから無理です。
0890デフォルトの名無しさん
2006/11/05(日) 10:22:22原因は解りました
テーブルにフィールドを追加して、そのフィールドをフォームの
VBAで使用できますが、
サブフォーム付のフォームのVBAだと参照できません
回避する方法はあるのかもしれませんが
めんどくさいけど、新規で作り直します
0891デフォルトの名無しさん
2006/11/05(日) 11:34:56超テキトーな解法
エラーになることを逆手にとって
ShapeにあってRangeにないプロパティ/メソッドを使ってエラーの場合は終了
On Error ResumeNext
Selection.Shapeにしかないプロパティ/メソッド
If Err.Number <> 0 Then
exit sub
end if
on error goto 0
Selection.Top
とか
0892デフォルトの名無しさん
2006/11/05(日) 11:37:13○ ttt = Selection.Top
0893デフォルトの名無しさん
2006/11/05(日) 12:10:18>nnn=Selection.Name
こういうのはTypeNameを使う
If "Range" = TypeName(Selection) Then
MsgBox "Range"
End If
0894デフォルトの名無しさん
2006/11/06(月) 12:26:05環境はXP、Office2003です。
一つのシートにA1〜N1までのセルに数値が入っていて、その中のの数値の文字を結合して
A1に出力する方法を考えているのですが、良い方法は無いでしょうか?
マクロの記録でしのごうと思ったのですが、うまくいきませんでした。
0895デフォルトの名無しさん
2006/11/06(月) 13:30:08Dim intCell as integer , strOut as string
For intCell = 1 to 14
strOut = strOut & cells(1,intCell).value
Next intCell
cells(1,1).vallue=strOut
end sub
こういう事でいいのかな?
0896デフォルトの名無しさん
2006/11/06(月) 14:58:29求められていた動作をしました。
0897895
2006/11/06(月) 17:23:180898デフォルトの名無しさん
2006/11/06(月) 22:59:56計算対象になってるA1セルに出力すんだから。
0899デフォルトの名無しさん
2006/11/07(火) 22:35:23何かよい方法はありませんか?
よろしくお願いします。
0900デフォルトの名無しさん
2006/11/07(火) 22:44:33具体的なやり方はヘルプ見るなりググるなりして調べよう。
0901デフォルトの名無しさん
2006/11/07(火) 22:52:230902899
2006/11/08(水) 00:15:36調べた結果わかりました。
Write♯ステートメントを用いればよいのですね。
ありがとうございました。
しかし、openステートメントでファイルを開くので、ファイル名の一部に変数を参照して保存できないため、今度はそちらへの対処が必要となってしまいました。
どのような対処法があるでしょうか?
0903デフォルトの名無しさん
2006/11/08(水) 00:17:33open は変数使えるぞ?
0904900
2006/11/08(水) 00:18:27早とちりで書き込んでしまってすみません。
ありがとうございました。
0905デフォルトの名無しさん
2006/11/08(水) 11:49:210906デフォルトの名無しさん
2006/11/08(水) 12:36:100907905
2006/11/08(水) 12:59:48読みやすさよりも情報量を優先して選んでクリスマス
0908デフォルトの名無しさん
2006/11/08(水) 14:30:18読みやすさより情報量という事なら
ttp://www.amazon.com/Learn-Word-2000-Document-Automation/dp/1556227515/
0909905
2006/11/08(水) 14:56:58ありがとう、でもできれば、和。
0910デフォルトの名無しさん
2006/11/08(水) 17:43:23情報後出しでは誰も答えてくれなくなるよ。
そういうヤツウザいので俺はパス。
0911905
2006/11/08(水) 17:54:27ごめんなさい。
0912デフォルトの名無しさん
2006/11/08(水) 19:34:34つーか情報の量を求めてるのに英語NGって何だよ。
自分から、扱える情報の量を減らしてるだけじゃんw
0913デフォルトの名無しさん
2006/11/08(水) 21:35:07UserForm1のImage1にビットマップを読み込んで,
座標ごとのRGBを調べることを考えてます。
Image1で,Pointが使えるなら,下のソースで
問題ないと思いますが,エクセルマクロでは
Pointが使えません。
何か,手がありましたら教えてください。
Image1.Picture = LoadPicture("aaa.bmp")
for i=1 to 100
for j=1 to 100
c = Image1.Point(i, j)
r = (c And &HFF)
g = (c And 65280) \ 256&
b = (c And &HFF0000) \ 65536
next j
next i
0914905
2006/11/09(木) 09:55:04なるほど、それはごもっともだと思いました。
それでは、和限定はなしでお願いします。
ほかによい本はございますか?
0915905
2006/11/09(木) 10:01:44た・・・高いっすね・・・。
0916デフォルトの名無しさん
2006/11/09(木) 10:23:13まあなんにしても、君自身が買う価値を見いだせなければ買わなければ良いだけだが
単に情報量だけではなく、君が納得する情報量で、君が納得できる価格の本を教えろとか言われても
そんな感覚的なことは他人にはわからないから、それなら自分で探せって話になるよ。
つまり、>>908で納得できるなら勝手に買え、納得できないとかワガママ言うなら
あとは自分で探せってことでこれ以上教えることは何もないってことになる。
0917905
2006/11/09(木) 11:09:37でもなぁ、中途半端なのかって、結局使えなかったら、
無駄だしなぁ。
0918デフォルトの名無しさん
2006/11/09(木) 11:44:41紹介を信じて購入に踏み切れないなら、最初から他人の紹介など頼るなよ。
とにかくあとは自分で決定することだけなんだから、買うにしても買わないにしてもここで粘着する必要はないだろ。
0919デフォルトの名無しさん
2006/11/09(木) 12:43:41買ってみて使えなかったら次の買うだけだろ。
0920905
2006/11/09(木) 12:49:15金がねーんだよ、死ね死ね詐欺のさくらちゃんに寄付しちゃったから。
0921905
2006/11/09(木) 12:49:47で、あなたはどんなVBAの本を持っているの?
紹介しなくてもいいから、その本教えて。
0922デフォルトの名無しさん
2006/11/09(木) 13:33:210923デフォルトの名無しさん
2006/11/09(木) 13:34:22無駄だしなぁ。
0924デフォルトの名無しさん
2006/11/09(木) 16:52:200925デフォルトの名無しさん
2006/11/09(木) 19:33:01基本だが、マクロの記録を覚えろ。そういう問題は全て解決する。
0926デフォルトの名無しさん
2006/11/09(木) 22:03:53黙って>>925に従え
エロエロ弄ってみれば、そのうち気持ちよくなってくるよ
そうやって覚えていくもんだから心配するな
0927924
2006/11/10(金) 09:30:25wdAlignPageNumberRight, FirstPage:=True
このね、(X)っていうのをどうにか取り除いた書式にしたいのです。
0928デフォルトの名無しさん
2006/11/10(金) 09:34:59BIOSがないとやっぱダメなんでしょうか?
0929デフォルトの名無しさん
2006/11/10(金) 10:58:02何勘違いしてるの?
0930924
2006/11/10(金) 14:15:10勘違いとは・・?
0931デフォルトの名無しさん
2006/11/10(金) 14:21:400932924
2006/11/10(金) 14:42:180933<sage>
2006/11/10(金) 14:52:28分からないことがありますので、教えて下さい。
目的:
リッチエディト形式で来たメールを返信をする際に、元々の送り主が書いた
文書の書式やスタイルを崩さずに、自分が書いた文書を挿入する。
問題:
Body プロパティからメール本文を読み込んで、自分の返信内容をくっつけて、
Body にもどすと元々の本文に掛かっていた、書式がなくなってしまう。
コメント:
ようするに何をやろうとしているかというと、Outlook ではなく別のエディタ
で書いたメールの内容を返信に使いたいが、送り主の本文の書式を崩すこと
なく、Body を構成できないか?ということ
0934デフォルトの名無しさん
2006/11/10(金) 15:54:31ググレいうのもわかるけど、せめて、ここ読んどけくらいのHP
みしてやってもいいんジャマイカ?
0935デフォルトの名無しさん
2006/11/10(金) 16:25:39お前が教えてやれ。
俺?むしろ知りたい側だよ。
0936934
2006/11/10(金) 17:00:52早く教えてやれ!!っちゅーか、早く教えろ!
0937デフォルトの名無しさん
2006/11/10(金) 19:50:07ワードオブジェクトだな?ヘルプみるなり、省略して実行してみるなり、
してみたその結果が全てだ。
これでいいかかな?
0938デフォルトの名無しさん
2006/11/12(日) 00:18:31デフォルトでクリップボードの文字を挿入したいのですが
下の通り打ち込むとエラー424オブジェクトが必要ですと出てしまいます。
始めたばかりのため、無智な質問で恐縮ですが
どこがどうおかしいのかどなたか御指摘頂けないでしょうか?
すみませんが宜しくお願い致します。
Private Sub UserForm_Initialize()
Dim ob
Set ob = New DataObject
ob.GetFromClipboard
MyClip = ob.GetText
UserForm.TextBox1.Value = MyClip
End Sub
0939デフォルトの名無しさん
2006/11/12(日) 00:45:00UserForm に変更してるの?デフォでは
UserForm1 のはずだが。フォームモジュールに書く場合は、フォームオブジェクト省略出来るし。
つーか、このくらいなら知識なんか無くても普通にデバッグすれば、すぐに原因に行き着くだろ。
デバッグも出来ないのにコード書き始めるなんて、チェーンの付け方も知らずにノーマルタイヤで
雪国に乗り込むようなものだ。行き当たりばったりじゃなくて、最低限必要なことは先に覚えろ。
あと、それだとクリップボードにテキスト以外が入ってるとエラー出るから
GetFormatでテキストかどうか調べてからGetTextした方がいいな。
0940デフォルトの名無しさん
2006/11/12(日) 16:50:14debug覚えてはいましたが、不注意で気づきませんでした。
0941デフォルトの名無しさん
2006/11/13(月) 15:28:31納品先の環境は、Word2000 WindowsXPSp2です。
弊社の環境で作成したWordオートメーションソフトウェアが、
納品先の環境で起動できません。
なぜでしょうか。
0942デフォルトの名無しさん
2006/11/13(月) 17:06:52ttp://www.projecta.co.jp/migration/download.html
でも読んでみたら。
0943941
2006/11/13(月) 18:35:18産休。
これは大変だ!
0944デフォルトの名無しさん
2006/11/13(月) 19:10:45A1:C5など、指定したセルの範囲内をダブルクリックしたときに、
入力フォームを表示するにはどうしたら良いのでしょうか?
A1などのセル単体の場合は
Private Sub Worksheet_BeforeDoubleClick(......
if Target.Address = "$A$1" Then
Form.show
Endif
End sub
とすれば良いのは分かるのですが、あるセルの範囲内であるかを
条件判断する方法が分かりません。
どなたか教えて下さい。お願いします。
0945デフォルトの名無しさん
2006/11/13(月) 19:31:21「範囲」が分散しているかどうかで話は変わるが、
文章を読むからに分散していないと仮定すると
if Target.Adress ...のところを
if 2<target.row or target.row<6
if 3<target.column or target.column<9
Form.Show
end if
end if
ってな感じが一番分かりやすいかも
分散しているなら配列かな?
このスレの100レス以内に似ているものがあると思う。
0946デフォルトの名無しさん
2006/11/13(月) 19:32:370947デフォルトの名無しさん
2006/11/13(月) 20:07:55If Not Intersect(Target, Range("A1:C5")) Is Nothing Then
Form.show
End If
の方が解りやすいと思うが。
0948デフォルトの名無しさん
2006/11/13(月) 20:13:01素晴らしい
0950デフォルトの名無しさん
2006/11/13(月) 22:17:46パーフェクトだ,ウォルター。
だがこのコードはもう私のモノだ。私だけのモノだ。
0951デフォルトの名無しさん
2006/11/14(火) 16:53:41みなさんならどんな点が重要だと思うか教えてくれませんか?
環境はWinXP Home Excel2003です。
個人的には、
4手目からは1手目から順に消えていく
とかできたら最高なんですが可能でしょうか?
0952デフォルトの名無しさん
2006/11/14(火) 17:17:59そのように組めば可
0953デフォルトの名無しさん
2006/11/14(火) 21:21:54バハムートラグーンなんかいいと思うんだ。
NTRも完備しているし。
0954942
2006/11/16(木) 09:42:130955デフォルトの名無しさん
2006/11/16(木) 16:42:240956デフォルトの名無しさん
2006/11/16(木) 16:46:050957デフォルトの名無しさん
2006/11/16(木) 17:02:110958デフォルトの名無しさん
2006/11/16(木) 20:44:130959デフォルトの名無しさん
2006/11/18(土) 12:41:10ただし読みやすさを考慮して、
以下のような最初に空白の場合のプログラムを書いて、後に入力済みの場合のプログラムを書く方法じゃなく
最初に入力済みの場合、後に空白の場合という順番で書きたい
if range(*).value = "" then
〜←ここが長いのでif節が長くなってしまい読みにくい
〜
〜
else
〜←ここは短い
end if
0960デフォルトの名無しさん
2006/11/18(土) 12:52:48?・・・
> if range(*).value = "" then
↓
> if range(*).value <> "" then
・・・こう?
0961デフォルトの名無しさん
2006/11/18(土) 14:36:43すげぇ!できた マジサンクス!
不等号そーゆーふうに使えんだな
0962デフォルトの名無しさん
2006/11/18(土) 16:28:400963デフォルトの名無しさん
2006/11/18(土) 18:38:47|┃三 `、 - 、_ _,. マ
|┃三 `ヽ、~` - 、_ , -──、._,. - ' /
|┃三 \ i' l´l l⌒l l`i /
|┃三 \ |⊂⊃~⊂⊃|_ / そんなことより石川賢が死んだんだが
|┃三 ⊂) ). ロ l⌒l ロ|)⊃
|┃三 ヽ.iコ `-´ ri/|
|┃三 , '⌒ ヽ_,. -/ヽ._,.旦,_ン. .| , - 、
|┃三 ,. - '~`ヽ `ヽ、 :|, -~──'── 、_
|┃三 >-─-、 | , -─-、. `──── ` ヽ
|┃三 , ' |::| | | | ,───、 / ̄ ̄ヽ i_.
0964デフォルトの名無しさん
2006/11/18(土) 18:54:39chdirステートメントによって、カレントフォルダをネットワーク内の他のPCのフォルダに設定したいのですがうまくいきません。
ChDir "\\PC名\・・・・・"
とやっているんですが。
上記が間違っているのでしょうか?それとも、この方法では仕様上不可能ということなんでしょうか?
ちなみに上記""内+ファイル名によって、openメソッドでファイルを開くことは出来ています。
0965デフォルトの名無しさん
2006/11/18(土) 19:48:40ネットワークだとできない気がした。APIのSetCurrentDirectoryあたり使うのが定番だったような・・
あいまいでスマンが
0966デフォルトの名無しさん
2006/11/18(土) 19:51:45notはそこにつけるのかorz
=の後につけて試してはみてた・・・
もう一個質問していいですか?
"〜.xls"という名前のファイルが開いてるかどうか調べるのはどうすればいいんでしょうか?
0967デフォルトの名無しさん
2006/11/18(土) 20:02:45一つの方法として、Application.Windowsコレクションをfor eachで
これでピンとこないなら調べれ。
コレクションをループさせるのはけっこう重要だから試行錯誤で身につけときな
0968デフォルトの名無しさん
2006/11/18(土) 20:22:08>>967さん、早々とレスありがとうございました
やっぱfor eachでしたか
For Each wb In Workbooks
If wb.name = book2 Then
MsgBox "すでに" & book2 & "を開いてるよ!" & Chr(13) & _
"一旦閉じて!", _
vbExclamation
Exit Sub
Exit For
End If
Next wb
0969デフォルトの名無しさん
2006/11/18(土) 21:30:09その通りにしたら出来ました。
ありがとうございました。
0970959
2006/11/20(月) 15:54:31FAFQR235GGT3GEGATAITII32T2AT
ATATWTATATATATAT23T23T23T2T2
2QWTHGQQPQOHYLKJSLGHIJIL4JTI
AFGAFGEWGAGAWEGA
このよう長い文字列があります。(実際もっと長いですが)
外部のファイルに書いてある数字のリストに沿って、この文字列の特定の位置を赤色なり青色なりで
装飾したいのです。
5
34
80
のように書いてあるファイルだとすると、5番目の文字から5文字を装飾、34番目の文字から5文字を
装飾していきたいのですがVBAだとどのように記述すればよいのでしょうか?
よろしくお願い致します。
0971970
2006/11/20(月) 15:57:280972デフォルトの名無しさん
2006/11/20(月) 16:01:50マクロの記録録ってちょこっと書き換えれば出来る。
0974デフォルトの名無しさん
2006/11/20(月) 16:22:01記録を録るのは色付け部分。
読み込んだ値を変数に入れて置いて、記録を録ったものに被せればいい。
なんにしてもあーだこーだ言う前に、まずはやってみろ。
0975デフォルトの名無しさん
2006/11/20(月) 16:59:18選択されているセルの列番号を数字でなくアルファベットで返す方法を探しています。
そのためにコードを書いてしまえばそれで終わりなのですが、すでに用意されているなら毎回それを書くのがすごく無意味なので・・・
エクセルVBAにそれが用意されているようなら教えていただけませんでしょうか。
0976デフォルトの名無しさん
2006/11/20(月) 21:28:14オリジナルな関数を用意するしかないと思うな。
列のアルファベットのみ知りたいの何故かな?
functionで書けば毎回まあそう手間はないが
0977デフォルトの名無しさん
2006/11/20(月) 23:44:04Rows("1:n").Select
としても型が一致しないっていうエラーが出てしまいます。
どうすれば選択できますか?
0978デフォルトの名無しさん
2006/11/20(月) 23:49:230979デフォルトの名無しさん
2006/11/20(月) 23:58:52Do until Cells(i,1).value = ""
i = i + 1
Loop
とし、その後で
1からi行全て選択したいわけです。
どのように記述すればよいですか?
0980デフォルトの名無しさん
2006/11/21(火) 00:01:30変数を""中に入れずに文字列としてくっつける。
0981デフォルトの名無しさん
2006/11/21(火) 00:04:55Rows(1:n)〜
にすると違うエラーが、、、(´つω;`)
0982デフォルトの名無しさん
2006/11/21(火) 00:09:14区別しろと言ったんだ。文字列は文字列として、変数は変数として扱えと言ったんだ。
0983デフォルトの名無しさん
2006/11/21(火) 00:14:11Rows("1":n)も駄目ですよ、、、
Rows("1:11")ってのが出来るわけだから、
Rows("1":n")、、、?
こんな記述見たことねぇ(;´д`)
あぁ手元にPc無いのが残念です
0984デフォルトの名無しさん
2006/11/21(火) 00:32:44変数の内容を文字列に変えてから、外側の文字列と連結しろよ。
文字列の連結は知ってるか?
"文字列1" & "文字列2"ってヤツだ。
変数の内容を文字列にする関数は知ってるか。str(変数)だ
この関数、こういう使い方の時にはちょっと問題があって、
数値を文字列にするとき、先頭の一文字を符号用に予約してしまう。
負の数ならマイナス、正の数ならスペース(空白)だな。
だから、符号を除去する必要があるわけ。
文字列の先頭から2文字目以降を得る。には、mid関数を使え。
最終的には、
Rows("1:" & mid( str( n ), 2 ) ) かな。
0985デフォルトの名無しさん
2006/11/21(火) 00:43:07問題ではなく利点だ。そういう仕様が不都合な場合はCStr関数使えば良い。
Str関数を使うのは、スペースが確保された方が都合が良いときだけなので
Str関数を使う上でスペースが入ることが問題になることはあり得ない。
それとVB・VBA言語は文字列型変数への代入や、&演算(連結)を行うと、自動で文字列変換を行う。
Debug.Print TypeName(1 & 1)
0986デフォルトの名無しさん
2006/11/21(火) 07:44:25非常にわかりやすい説明ありがとうございました。
全く思いもよらない方法でした(´・ω・`)勉強しなおします
0987デフォルトの名無しさん
2006/11/22(水) 19:46:21A2セルに「かきくけこ」と入力してあって、A1セルをクリックすると
B1セルに「あいうえお」
A2をクリックすると
B1セルに「かきくけこ」と入力するような
マクロを考えています
Excel2002使用しています
いまは、ダブるクリックすると起動する
プロシージャで対応していますが、
ワンクリックで行いたいのでよろしくお願いします
0988デフォルトの名無しさん
2006/11/22(水) 20:22:21>>773
0989デフォルトの名無しさん
2006/11/22(水) 23:05:36作者の方へ
VisualBasicの学習者たちのためにソース公開してください
(公式サイトが消滅しているようなので、ここにカキコします)
((((;゚Д゚)
すばらしいソフトなので、ぜひともお願いします
0990デフォルトの名無しさん
2006/11/22(水) 23:20:44ある意味スゴイですねw
0991デフォルトの名無しさん
2006/11/22(水) 23:50:33>988のリンク先 >773 に加えて、
表示直後にB1セルをアクティベート(セレクト)したら、
773中に書かれてる問題の半分が解決するんじゃね?
0992デフォルトの名無しさん
2006/11/23(木) 00:13:13で、標準の文字コードがUnicodeのため、XMLファイルもUnicodeで出力されてしまいます。
これをShift-JISで出力したいのですがどうすればよいのでしょうか?
DOMリファレンスで見た限りメソッドにもそれらしいものは見当たらなかったのですが。。
0993デフォルトの名無しさん
2006/11/23(木) 00:30:02>>760
0994デフォルトの名無しさん
2006/11/23(木) 00:55:390995992
2006/11/23(木) 01:18:280996デフォルトの名無しさん
2006/11/23(木) 03:56:24これで定義した配列に数値を入れてセルに書き出すと数値が変わるんですが。
試しに
20061122
20061121
20061120
20061117
20061116
20061115
20061114
っていう数値を配列に入れて何も処理をせずにセルに書き出すと
20061122
20061120
20061120
20061116
20061116
20061116
20061114
こうなって出てきます、これは一体何が起こってるんでしょうか? すごく困ってます。
0997デフォルトの名無しさん
2006/11/23(木) 04:23:28単精度の仮数部は10進数だと6桁ぐらいしかない。(2進数で23桁)
それ以上の桁は記録できない。
0998デフォルトの名無しさん
2006/11/23(木) 05:20:540999デフォルトの名無しさん
2006/11/23(木) 14:01:461000デフォルトの名無しさん
2006/11/23(木) 14:07:5010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。