Excel VBA質問スレ Part10
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/02/23(月) 04:56:43前スレ http://pc11.2ch.net/test/read.cgi/tech/1228372971/
★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
VBAとは、『Visual Basic for Application』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
0002デフォルトの名無しさん
2009/02/23(月) 04:57:0801 http://pc11.2ch.net/test/read.cgi/tech/1054356121/
02 http://pc11.2ch.net/test/read.cgi/tech/1168308855/
03 http://pc11.2ch.net/test/read.cgi/tech/1180192018/
04 http://pc11.2ch.net/test/read.cgi/tech/1189814602/
05 http://pc11.2ch.net/test/read.cgi/tech/1197448064/
06 http://pc11.2ch.net/test/read.cgi/tech/1205231499/
07 http://pc11.2ch.net/test/read.cgi/tech/1212587819/
08 http://pc11.2ch.net/test/read.cgi/tech/1219673793/
09 http://pc11.2ch.net/test/read.cgi/tech/1228372971/
0003デフォルトの名無しさん
2009/02/23(月) 09:36:100004デフォルトの名無しさん
2009/02/23(月) 18:19:490005デフォルトの名無しさん
2009/02/23(月) 18:23:07インラインで処理しろ
0006デフォルトの名無しさん
2009/02/24(火) 06:04:010007デフォルトの名無しさん
2009/02/24(火) 17:27:400008デフォルトの名無しさん
2009/02/24(火) 18:47:530009デフォルトの名無しさん
2009/02/24(火) 19:55:52一番使い方の変わった予約語の一つだろうな。
F5で実行ってのはPC-8001の時代から変わってないのが面白い。
0010デフォルトの名無しさん
2009/02/24(火) 22:21:08自作関数作ったりしたんだけど、やっぱりobjメソッドで配列を取りだして操作ができなくて。
何かに使うとかではなくて、好奇心なのでお気軽な回答を頂ければ幸いです。
0011デフォルトの名無しさん
2009/02/24(火) 23:08:050012デフォルトの名無しさん
2009/02/25(水) 00:42:33Option Explicit
call hoge
call hogehoge
sub hogehoge()
Dim a(2)
a(0)="apple"
a(1)="berry"
a(2)="cucumber"
dim d
set d=CreateObject("Scripting.Dictionary")
d.add(1),a
dim f
for each f in d(1)
wscript.echo f
next
end sub
sub hoge()
Dim a
a=Array("apple","berry","cucumber")
dim d
set d=CreateObject("Scripting.Dictionary")
d.add(1),a
dim f
for each f in d(1)
wscript.echo f
next
end sub
0013デフォルトの名無しさん
2009/02/25(水) 02:50:47何の言語?
0014デフォルトの名無しさん
2009/02/25(水) 06:02:29また、ある列に上の値と同じ文字があれば行の高さを80とする
ある列に下と同じ文字があればそのセルの下にあるラインの消去を行う。
また、ある列に上の値と同じ文字があれば行の高さを80とする
プログラムを作ったが動きません。
どこが間違っているのか、だれか教えてください。
For N = 1 To LastRaw 'LastRaw は最終行
If WorkSheets("OutPut").cells(N,12).value = WorkSheets("OutPut").Cells(N+1,12).value
Then WorkSheets("OutPut").Cells(N,12).xlEdgeBottom = False
ElseIf WorkSheets("OutPut").cells(N,12).Value <> WorkSheets("OutPut").cells(N+1,12).value And
WorkSheets("OutPut").Cells(N,12).value <> WorkSheets("OutPut").Sells(N-1,12).value
Then
Rows("N:N").Select
Selection.RowHeight = 80
End If
Next
エクセル 2003 XP です。
0015デフォルトの名無しさん
2009/02/25(水) 06:08:31誤 また、ある列に上の値と同じ文字があれば行の高さを80とする
正 また、ある列に上の値と同じ文字が無くまた 下にも無ければ、行の高さを80とする
0016デフォルトの名無しさん
2009/02/25(水) 08:27:141 With Worksheets("OutPut")
2 For N = 1 To LastRaw 'LastRaw は最終行
3 If .Cells(N, 12) = .Cells(N + 1, 12) Then
4 .Cells(N, 12).Borders(xlEdgeBottom).LineStyle = xlNone
5 ElseIf .Cells(N, 12) <> .Sells(N - 1, 12) Then
6 .Rows("N:N").RowHeight = 80
7 End If
8 Next
9 End With
1行目 全体をWithで囲めば、いちいちワークシートを指定しなくてもよくなる
3行目 Valueは省略可能。ただしこれは初心者にはおすすめしない
4行目 罫線の消し方はマクロの記録で調べる
5行目 この時点で下とは違うことが判明してるから上だけ調べればいい
6行目 いちいちSelectしない。ワークシートの指定が抜けてる
あと、行番号(左端の数字)は消さなくても丸ごとコピペで動くよ
0017デフォルトの名無しさん
2009/02/25(水) 08:32:02With Worksheets("OutPut")
For N = 1 To LastRaw 'LastRaw は最終行
If .Cells(N, 12) = .Cells(N + 1, 12) Then
.Cells(N, 12).Borders(xlEdgeBottom).LineStyle = xlNone
ElseIf .Cells(N, 12) <> .Cells(N - 1, 12) Then
.Rows(N).RowHeight = 80
End If
Next
End With
0018デフォルトの名無しさん
2009/02/25(水) 08:35:35↑
にしないと、1行目と2行目が違ってた時に0行目を調べようとしてエラーになる
0019デフォルトの名無しさん
2009/02/25(水) 08:48:28VBAって論理式のショートサーキットしないんだっけ?
だとしたらこうかな?1行目の扱いが今ひとつ不明なんでループから出した。
With Worksheets("OutPut")
If .Cells(1, 12) = .Cells(2, 12) Then
.Cells(1, 12).Borders(xlEdgeBottom).LineStyle = xlNone
EndIf
For N = 2 To LastRaw 'LastRaw は最終行
If .Cells(N, 12) = .Cells(N + 1, 12) Then
.Cells(N, 12).Borders(xlEdgeBottom).LineStyle = xlNone
ElseIf .Cells(N, 12) <> .Cells(N - 1, 12) Then
.Rows(N).RowHeight = 80
End If
Next
End With
0020デフォルトの名無しさん
2009/02/25(水) 08:49:52With Worksheets("OutPut")
If .Cells(1, 12) <> .Cells(2, 12) Then
.Cells(1, 12).Borders(xlEdgeBottom).LineStyle = xlNone
EndIf
For N = 2 To LastRaw 'LastRaw は最終行
If .Cells(N, 12) = .Cells(N + 1, 12) Then
.Cells(N, 12).Borders(xlEdgeBottom).LineStyle = xlNone
ElseIf .Cells(N, 12) <> .Cells(N - 1, 12) Then
.Rows(N).RowHeight = 80
End If
Next
End With
0021デフォルトの名無しさん
2009/02/25(水) 08:53:05With Worksheets("OutPut")
If .Cells(1, 12) = .Cells(2, 12) Then
.Cells(1, 12).Borders(xlEdgeBottom).LineStyle = xlNone
Else
.Rows(1).RowHeight = 80
EndIf
For N = 2 To LastRaw 'LastRaw は最終行
If .Cells(N, 12) = .Cells(N + 1, 12) Then
.Cells(N, 12).Borders(xlEdgeBottom).LineStyle = xlNone
ElseIf .Cells(N, 12) <> .Cells(N - 1, 12) Then
.Rows(N).RowHeight = 80
End If
Next
End With
0022デフォルトの名無しさん
2009/02/25(水) 11:54:020023デフォルトの名無しさん
2009/02/25(水) 14:30:58セルZ1〜セルZ10にある一次元の要素を
一つの二次元配列に格納する方法を教えてください><
0024デフォルトの名無しさん
2009/02/25(水) 14:42:25dim v() as variant
dim i as long
v()=range("A1").resize(10,2).value
for i=1 to 10
v(i,2)=cells(i,"Z").value
next i
0025デフォルトの名無しさん
2009/02/25(水) 17:50:380026デフォルトの名無しさん
2009/02/25(水) 17:50:59ネットでも『RGB関数を使うと近い色になる』との答えが多く、
自分でも試したのですがその通りでした
良い方法があればご教授ください
OSはXP エクセルは2003です
0027デフォルトの名無しさん
2009/02/25(水) 17:52:310028デフォルトの名無しさん
2009/02/25(水) 18:13:30を書いてください。よろしくお願いします。
0029デフォルトの名無しさん
2009/02/25(水) 18:28:330030デフォルトの名無しさん
2009/02/25(水) 19:55:570031デフォルトの名無しさん
2009/02/25(水) 20:56:430032デフォルトの名無しさん
2009/02/25(水) 21:25:09ヒント パレット
0033デフォルトの名無しさん
2009/02/25(水) 21:35:11可能です。
0034デフォルトの名無しさん
2009/02/25(水) 21:42:250035デフォルトの名無しさん
2009/02/25(水) 23:36:51そのロジックはまずいよ
> RSS.EXEを起動していないなら、RSS.EXEを実行するというマクロ
の途中でもしRSS.EXEが起動したら2重起動になっちゃう
0036デフォルトの名無しさん
2009/02/25(水) 23:54:14ありがとうございました。
参考にして 成功しました。
003726
2009/02/25(水) 23:59:13以下のマクロできれいなグラデーションの様なグラフを作成したいのです
Sub test()
Dim aaa As String
Dim i As Integer
aaa = ActiveSheet.Name
'仮データ作成(1列目に1〜225の数字を入れる−−−−−−−−−−−−−−−−−−−−−−−
For i = 1 To 225
Cells(i, 1) = i
Next
'グラフ作成−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Columns("A:A").Select
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("Sheet3").Range("A1:A225"), PlotBy _
:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:=aaa
ActiveChart.HasLegend = False
'マーカの色付け−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
For i = 1 To 225
ActiveChart.SeriesCollection(1).Points(i).Border.Color = RGB(0, i, 225)
ActiveChart.SeriesCollection(1).Points(i).MarkerBackgroundColor = RGB(0, i, 225)
ActiveChart.SeriesCollection(1).Points(i).MarkerForegroundColor = RGB(0, i, 225)
Next
End Sub
0038デフォルトの名無しさん
2009/02/26(木) 00:15:11フルカラー使いたいなら画像を貼り付けるかExcel2007に乗り換え
0039デフォルトの名無しさん
2009/02/26(木) 00:24:59このマクロを必要とする場面は、RSS接続をせずに現在使用中のマクロを実行すると
外部接続確認メッセージの応答を300回しなければならなくなるのを回避するためです。
2重起動は、RSS.EXEの場合は、やっても問題は発生していませんので、気にしてません。
shellと変数名の扱い方が肝腎かなとは思っているのですが、さっぱり、出来なくなっている
のでここに来ました。
0040デフォルトの名無しさん
2009/02/26(木) 00:35:32基本、アプリの起動確認はAPI使わないと無理。まずはこのあたり読んで勉強汁
ttp://www.happy2-island.com/excelsmile/smile04/capter00302.shtml
004139
2009/02/26(木) 15:53:02サンクス。踏ん切りがつきました。APIでやります。
0042デフォルトの名無しさん
2009/02/26(木) 19:21:46appがなければ起動する。
その場合appがPATHにないと失敗する。
なので、RSS.EXEのショートカットを作って
ファイル名をapp.lnk、RSS.EXE.lnkかRSS.lnkか、にして
PATHに置けば済む話とちゃう?
004339
2009/02/26(木) 20:34:24を読むと、返値がとらえられるということなので、そうゆう話です。
DDEInitiateやDDEの初期化に関することも、他の場面で調べてたことはあるのですが
いつも、形にならないまま終わってしまうので、ついつい、丸投げ質問形になります。
土日になりますが挑戦してみます。
0044デフォルトの名無しさん
2009/02/26(木) 21:51:25嘘つくな。wshの方が簡単。
ttp://www.atmarkit.co.jp/fwin2k/operation/wsh05/wsh05_03.html
0045デフォルトの名無しさん
2009/02/26(木) 22:05:12/ \
./ .\
{ }
.| / ̄""''-=,,,,_,,,,,,==-'''"\ |
.l, .( ,. - ' .、 ,. - , .} |
l > ,=ニ\ ゛ | ''゛_,=ヘ、 r' {_
/~''i //_\_..`7| l、{''″/__`>ヽ |r`i
l .{`|./ ヽ二・ニゝチ、 ! .ゝrニ・二r } ! i l
{ {(l { ノ | | ヽ :: }| ソ/
ヽヽ|.{ / | | \ i.|//
\|.i / ,,.. | l._,, . \ i !/
乂i / - (__,)-゛ ' {丿
.l .!、. ,. !., ., / |
人 \ .!''''" ̄~ ̄`''! / 人
./ | .\ ,\ '-"" ゛-' / / | .ヽ
ノ .{ \ .ヽ,., .: ,イ / } ヽ
-'″ l `' 、`.───″ .} ヽ
0046デフォルトの名無しさん
2009/02/26(木) 22:54:05それは
> RSS.EXEを起動していないなら
の答えになってないだろ?
0047デフォルトの名無しさん
2009/02/26(木) 23:40:33全般的な使い方じゃなくて、
このこの方法で起動した分だけ気にすると言う要件なんじゃないの?
0048デフォルトの名無しさん
2009/02/27(金) 02:16:490049デフォルトの名無しさん
2009/02/27(金) 15:44:210050デフォルトの名無しさん
2009/02/27(金) 16:54:21勝手に条件不可するなや
0051デフォルトの名無しさん
2009/02/27(金) 17:12:530052デフォルトの名無しさん
2009/02/28(土) 00:15:42Ver:Excel2000 2003 2007についての質問です。
VBAはコードサイズに限界がある(?)のであまり複雑な事はさせられない
という話を聞いたのですが、具体的にどのくらいなのでしょうか?
コマンドボタンやテキストボックス等にイベントをガシガシ記述していたら
ワークシートへの入力がほとんどないにもかかわらず気が付いたらファイルサイズが1MBを超えていました
このくらいならどうという事はないと思うのですが、ふと気になりました。
よろしくお願いします。
0053デフォルトの名無しさん
2009/02/28(土) 09:01:120054デフォルトの名無しさん
2009/02/28(土) 13:07:420055デフォルトの名無しさん
2009/02/28(土) 13:49:24へたくそでもとにかく動けばいいってレベルを目指すならいいんじゃない?
0056デフォルトの名無しさん
2009/02/28(土) 14:06:01概念も説明してくれるので、プログラム初心者でも読めるから。
他のは使い方の説明ばっかで使い物にならない。
最近はvbaの入門書を探したときないから、
このごろ出版されたものについてはどうだか知らないけど。
0057デフォルトの名無しさん
2009/02/28(土) 14:09:29大村あつしの本を使ったことがないだけ。
0058デフォルトの名無しさん
2009/02/28(土) 17:30:590059デフォルトの名無しさん
2009/02/28(土) 17:56:590060デフォルトの名無しさん
2009/02/28(土) 18:02:480061デフォルトの名無しさん
2009/02/28(土) 23:02:380062デフォルトの名無しさん
2009/02/28(土) 23:41:490063デフォルトの名無しさん
2009/03/01(日) 00:11:03拝むな
0064デフォルトの名無しさん
2009/03/01(日) 00:15:250065デフォルトの名無しさん
2009/03/01(日) 10:09:34レベルアップして行くのは当然として、3冊読んでみると同じ事が書かれているのが分かると思う。
「これ読んだからいらねー、飛ばそ」 じゃなくて、同じ内容を復習も兼ねて読んでみる事。
同じ事が書かれているって事は、それだけ重要な概念って事だからね。
あと、実例集やサンプル集は買う必要無い。裏ワザ系の本もいらない。
他の人が作ったプログラムを改編するだけじゃ自分の物にならない。
んで、基本的な概念が理解出来たならば、自分の業務に特化した本を買いあさると良いよ。
(今はネットで調べる方が便利だけど)
0066デフォルトの名無しさん
2009/03/01(日) 12:36:09VBAに中級とか上級とかの本があるかねえ・・・?
0067デフォルトの名無しさん
2009/03/01(日) 14:33:22やっぱ女は駄目だなと思ったよ。
0068デフォルトの名無しさん
2009/03/01(日) 17:39:05こき下ろすだけなら馬鹿でもできる
0069デフォルトの名無しさん
2009/03/01(日) 18:18:280070デフォルトの名無しさん
2009/03/01(日) 19:32:33マクロって何?なレベルの本
↓
OBJや変数が分かるレベルの本
↓
VBSやWIN32APIの呼び方が分かるレベルの本
↓
業務で必要なジャンルに特化した本
な感じで良いんでないかい?
0071デフォルトの名無しさん
2009/03/01(日) 20:18:29> マクロって何?なレベルの本
> ↓
> OBJや変数が分かるレベルの本
> ↓
> VBSやWIN32APIの呼び方が分かるレベルの本
ここまで、ピンクいろのざっくりした入門書に載ってたレベルじゃね?
0072デフォルトの名無しさん
2009/03/01(日) 22:56:51A1に1入れたらB1に丸一個
A2に2を入れたらB2に丸二個というようにAに数字を入れたら自動でBに○を数字分いれる式を作りたいのですがどのようにすればよろしいでしょうか。
0073デフォルトの名無しさん
2009/03/01(日) 23:22:00>>1
>★2 ExcelのVBA以外の部分に関する質問はNGです。
> 但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
0074デフォルトの名無しさん
2009/03/01(日) 23:41:58=LEFT("○○○○○",A1)
0075デフォルトの名無しさん
2009/03/02(月) 00:19:30このコードはアツイ。
煽りじゃなくて、マジでこの考え方好きだ。
0076デフォルトの名無しさん
2009/03/02(月) 07:37:35でも○が5個までしか表示できない件について。
rept関数にすれば幸せw
0077デフォルトの名無しさん
2009/03/02(月) 11:21:270078デフォルトの名無しさん
2009/03/02(月) 23:29:54この場合、ワークシート関数のREPT、VBA関数のStringと
目的そのままの関数があるのに、わざわざ弊害がある方法へと転換しなくても・・・・・
0079デフォルトの名無しさん
2009/03/03(火) 12:33:41For I = Cells(1, 1)
S = S + "○"
Next
Cells(2, 1) = S
0080デフォルトの名無しさん
2009/03/03(火) 13:48:071個前のレスぐらい読めよ
0081デフォルトの名無しさん
2009/03/03(火) 21:51:12なんつーでたらめw
0082デフォルトの名無しさん
2009/03/03(火) 22:01:26OSはXP、EXCELは2003です。
0083デフォルトの名無しさん
2009/03/03(火) 22:03:33発想の転換なんだと思っているんだと
思う
0084謝礼男
2009/03/03(火) 22:17:41解決スピードにもよりますが2万なら余裕で出せます。というかそれ以上に困ってます。
助けてください。クビになりそうです。
マクロあんまり詳しくないのにネットで探していじってたらわからなくなりました。
■現状:会社の機密書類に誤ったPASSをかけてしまいファイルが開けず困っています。明日取引先のプレゼンで使う資料が多数あって明日朝までに開けないとマジで上司に殺される。てかクビ。
■背景:上司のPCのエクセルファイルに全部passをかけてと頼まれたが1000個くらいあったので、マクロを使ってpassをかけようとした。途中までは順調だったが途中からpassが謎なものになってしまい、開けない。
■行動:とりあえずありえそうなpassは入力。フリーソフトでpass解読試みるが解読できず。
■依頼:可能性としてマクロが誤作動したのが原因ではないかと考えられるため、マクロ詳しい方にありえそうな誤作動ぶりを解明して、パスを解明してもらいたい。詳細は↓
0085謝礼男
2009/03/03(火) 22:18:20指定したフォルダ(D1)にあるエクセルファイルに指定のpass(C4)をかけるというマクロ
また別のマクロを使ってD列にはPC内のフォルダを列挙しており、上記作業が終われば次のフォルダに移動する。
で、実行したのが以下のマクロ
0086謝礼男
2009/03/03(火) 22:18:46Dim c As String
Columns("A:B").Select
Selection.ClearContents
Range("C1").Select
Selection.ClearContents
Range("A1").Select
a = Range("D1")
b = Dir(a & "\*", 2)
ChDir a
For l = 1 To 300
If b <> "" Then
Cells(l, 1).Value = b
0087謝礼男
2009/03/03(火) 22:19:32If (Right(b, 3) = "xls") Or (Right(b, 3) = "XLS") Then
c = a & "\" & b
On Error Resume Next
Workbooks.Open (c)
If Err.Number = 0 Then
Workbooks(b).Activate
ActiveWorkbook.SaveAs Filename:=c, _
FileFormat:=xlNormal, _
Password:=Range("C4").Value, WriteResPassword:="", ReadOnlyRecommended:=False, _CreateBackup:=False, _
ConflictResolution:=True
Workbooks(b).Close
Cells(l, 2) = "○"
Else
Cells(l, 2) = "×"
End If
Else
Cells(l, 2) = "×"
End If
b = Dir(, 2)
Else
l = 300
End If
Next
Cells(1, 3) = "終了"
Range("D1").Select
Selection.Delete Shift:=xlUp
End Sub
0088謝礼男
2009/03/03(火) 22:20:35・当初:マクロのとおり。ボタンクリックして、置き換えますかのyesをクリックして次へ次へ。
・途中1:そもそもパスがかかっているやつがあってそのファイルを開くpass入力求められたときは
面倒だったのでescおしてpass入力画面消して、置き換えますかのyesボタンも面倒になったのでyキー連打。
・途中2:さらにマクロ実行のコマンドボタン押すのが面倒になったので、マクロにショートカットキーをつけることに。
プライベートサブにショートカットのつけ方がわからず、
以下のマクロをプライベートサブではなくて普通のモジュールのマクロとして保存(macro1)し、macro1にショートカットキーを付加。ちなみにショートカットは ctrl+y
・途中3:↑のショートカットを使いctrl+yおしてescとyを連打する作業。
そしてその結果わかったのが。
プライベートサブでなくしてからは、passがかかっていない。(ほぼ全部)
しかし、時々passがかかっていて、なおかつ指定したpassではなくなっていた。
ってな感じでpassがわからなくなりました。
長文駄文失礼しましたが、本当に困っており、助けてくれる方をお待ちしています。
本気で謝礼いたしますので、なにとぞよろしくお願いします。
ちなみにwin2000のエクセルはなぜか97でした・・・・・
0089デフォルトの名無しさん
2009/03/03(火) 22:41:56新規ブックに
Private Sub Workbook_Open()
MsgBox "一身上の都合により退職させていただきます。" + vbCrLf + _
"僕の事は探さないで下さい。[2009/3/3]"
End Sub
0090デフォルトの名無しさん
2009/03/03(火) 22:47:290091デフォルトの名無しさん
2009/03/03(火) 22:49:41なので、「元エクセルのC4の内容」が必要かと・・・
パス有xls触ったこと無いが・・・
デバッグで対象xls開いた後のC4が元パスになってるか見てみてくれ。
シートモジュールにマクロを置いた場合、Range("C4").Valueはそのモジュールが属するシートのC4になるが
標準モジュールにマクロを置いた場合、Range("C4").Valueはアクティブシート、つまりこのコードでは
パスを掛ける対象ブックのアクティブシートのC4になる
パスを掛けたブックの内容が解らないと、具体的なパスの予測は不可能
多少なりとも内容を覚えているか予測できるなら、その値を試してみることだ
ブックを送ってくれるなら、そこらのフリーソフトより強力な強制解除を試してみても良いが、
機密書類と言うからにはそれは無理だろうし、強制解除は不正にも使えてしまうから、
強制解除方法自体を教えるのも無理だ
それに、その背景と現状でバックアップすら無いなら責任は上司の方が重いぞ
0093デフォルトの名無しさん
2009/03/03(火) 22:51:49Public void TaisyokuProc()みたいな処理が必要かと。
元xlsねーのか?
0094謝礼男
2009/03/03(火) 22:53:18糸口サンクス。
しかし、C4には本来のpass(仮にabc)がはいったままなんだが
開かないファイルはそのパス(abc)にはなっていないんだ。
ちなみに当初成功した分ははabcで開きます。
0095デフォルトの名無しさん
2009/03/03(火) 22:54:37もし、開けたら別名で保存。
0096>>91
2009/03/03(火) 22:55:30ん〜とね、
ActiveWorkbook.SaveAs Filename:=c,
FileFormat:=xlNormal, _
Password:=Range("C4").Value,
ここのrange(c4)が対象ExcelのC4内容ではないの?という意味。
つまり、対象C4で暗号化してるんではないかと・・・
0097謝礼男
2009/03/03(火) 22:56:20ありがとうございます。
91さんのおっしゃっていた事もこれ読んでちゃんと理解できました。
プライベートじゃないから 元エクセルを参照してしまったということなんですね。
自分の無知具合に唖然です。
正直元ファイルの内容はほぼわからないので、解読は不可能そうですね。
009891
2009/03/03(火) 23:01:27うまくいくかもよ。がんがれ!
0099デフォルトの名無しさん
2009/03/03(火) 23:07:54そのなかからDPB=って文字列を検索してみそ。
その中のDPB=に挟まれたわけわかめの者がパス
ってのでいいんじゃないのかい????????
みなさんどうおもうよ
この惨めな男に慈悲あたえてあげようじゃないの
0100デフォルトの名無しさん
2009/03/03(火) 23:33:18謝礼さんではないが、俺のExcel2000で[保存]-[ツール]のパスワードだと、DPBって無いんだが・・・
それって、マクロロックじゃまいか?
2000使ってるのは突っ込まないでくれ。軽いんだよね・・・
0101デフォルトの名無しさん
2009/03/03(火) 23:43:46MAPIでググって見ればサンプルあるよ。
けど、MAPIだとOutlook系しか送信できなかったと思った。(違ったらごめん)
CDOだと送信のみOK。受信不可。
セキュリティー系の送受信するなら、BSMTP.DLL使うのが楽チン。
けれど、BSMTPやるならVBアプリ作ったほうが・・・
0102デフォルトの名無しさん
2009/03/04(水) 00:02:13暗号化とけないのは仕方ないでしょ。上司のBU取っとかなかったのは痛いが。
こんなんで辞職はないから大丈夫でしょ。(それこそ上司が悪い)
粘着厨といわれるからこれで退散。がんがってね!
最後にこんな感じで変数とか改行とかつけると良いかも。以上です。
'/**
' * Excelの列番号から、A1形式の文字を返す。
' * @param columnNumber Excelの列番号
' */ @return String A1形式のExcel列番号
Private Function ColumnNumberToString(columnNumber As Integer) As String
Dim columnString As String '戻り値用
Dim uBit As Integer '上位桁用
Dim remain As Integer '余り用
If columnNumber <= 26 Then '列番号 <= 26 ("A" - "Z")
columnString = Chr(columnNumber + 64)
Else
uBit = Int(columnNumber / 26) '列番号 > 26 ("AA" - "ZZ")
remain = columnNumber Mod 26 '列番号を26で割って、余りを出す
If remain = 0 Then
columnString = Chr(uBit + 63) & "Z 'Chr(63) = 'A'
Else
columnString = Chr(uBit + 64) & Chr(remain + 64)
End If
End If
ColumnNumberToString = columnString 'A1形式の列文字を返す
End Function
0103デフォルトの名無しさん
2009/03/04(水) 00:04:050104デフォルトの名無しさん
2009/03/04(水) 00:54:27それと自分が処理したファイルとの区別はついてるんかな?
パスのわからないファイルの更新日時は確認したの?
もともと上司がパスを設定していたのなら、謝礼男に開けなくても当然かと思う…。
0105デフォルトの名無しさん
2009/03/04(水) 21:30:16報告して〜!気になるじゃん!
010682
2009/03/04(水) 23:44:12サンプルは何個か見付けましたけど、これって全部なにかしらのソフトをインストールしないと
使えないんですかね?
この機能を作ってるのが、余計なソフトを入れられない会社のPCな上に
複数のPCから利用されるのを目的として作りたいんですけど。
利用するすべてのPCで何かしらインストールしないと無理なんですかね?
0107101
2009/03/04(水) 23:54:53相当昔に業務ツール作成で使っただけなので間違いがあるかもしれないが・・・
MAPI :
特に無し。Office&OutlookExplessでOK。けど、Textの標準ソフトが秀丸とかだと動かなくなるので注意。
それと、OutlookがPopBeforeSMTPかなんかの暗号送受信ができなかった気がする。
MAPI対応MTUならOutlookじゃなくてもいけるはず。Beckyは無理だったと思う。
CDO:
2000系のCOMだかで動いたかな?送信NGでXP以降NGだったから早々にあきらめた。
.Netは違うのかな?
BSMTP:
フリーの超有名DLL。ツールとDLLを配布すれば誰でも使える。
このDLL自体がMTUなので、他にソフトはいらない。
しかし、25番とかのPort制限解除が必要。(ウィルスソフトとOS ポート制限)
0108デフォルトの名無しさん
2009/03/05(木) 00:00:54ふつうにDelphiとかでアプリ作ればいいんでないの?いややり方は知らんけど
Exelファイルを添付したいとかか?
0109101
2009/03/05(木) 00:11:36企業だとサーバー立てるのメンドくて無理ですね。配布の制限とか無いんですが。
まあ、Excelで集計したデータをサーバーで自動更新したいのではないかと。
サーバーAPP作って、そこにxlsを放り込むとかでもできますよね。
0110デフォルトの名無しさん
2009/03/05(木) 00:12:10操作しやすいExcelで登録した先に、スパムを送り付けたい。
0111デフォルトの名無しさん
2009/03/05(木) 02:05:57この程度じゃSPAM業者として成立せんだろ。2桁ぐらい少ないと思う。
Excelの操作をケータイで監視したいんじゃね?
Outlookにこだわらなければコマンドラインツールを使うとか。
0112デフォルトの名無しさん
2009/03/05(木) 02:14:281000万件・・・
0113デフォルトの名無しさん
2009/03/05(木) 07:05:360114デフォルトの名無しさん
2009/03/05(木) 07:55:30気になるね。
0115デフォルトの名無しさん
2009/03/05(木) 12:12:01Editorで作ったプログラムをワークシートで使うためにはどうしたらいいのでしょうか?
0116デフォルトの名無しさん
2009/03/05(木) 12:33:32VBEのこと?
ワークシートにボタン貼り付けたり、[マクロ]-[実行]でいいんじゃまいか?
違うのかな?
0117デフォルトの名無しさん
2009/03/05(木) 12:50:54VBEです
ユーザーフォームでプログラムを作り、VBE上で実行はできるのですがワークシートで実行する方法がわかりません
マクロのところにも作ったプログラムは表示されてないです
0118デフォルトの名無しさん
2009/03/05(木) 12:52:440119デフォルトの名無しさん
2009/03/05(木) 20:38:13例えば
exp(x)+n*x=0 (n=1,2,3,など)
の解xを求めたいとき、nをfunctionプロシージャの引数として変化させ
ソルバーで求めたxを返したいのですが。
XP、Excel2003です。よろしくお願いします。
0120デフォルトの名無しさん
2009/03/05(木) 21:05:16使ったこと無いけど、ググって見たかぎり出来ると思うよ。
教えてグーの質問見て思いました。
ttp://oshiete1.goo.ne.jp/qa1295710.html
関数の引数に対象セルの位置 or 範囲を入れればよさげだね。
後はSolverOkに引数を与えて、SolverSolveでコピペと。
マクロの記録をして、それをカスタムするのが早いと思います。
2008は駄目みたいだね。VBAが無理臭い。知らなかった。
0121119
2009/03/05(木) 22:09:13早速ありがとうございます。
試してみたのですが、なんかうまくいかない。。。
セルA1を =EXP(B1)+1*B1
セルC1を =test(A1,B1)
として次のプログラムを書いてみたのですが、B1の初期値を返すだけです。
Function test(y As Range, x As Range)
SolverOk SetCell:="y", MaxMinVal:=3, ValueOf:="0", ByChange:="x"
SolverSolve Userfinish:=True
test = x
End Function
できれば=EXP(B1)+1*B1もセルではなくFunctionプロシージャに記述したいのですがムリでしょうか。
0122デフォルトの名無しさん
2009/03/05(木) 22:34:52引数の使い方間違ってると思う。
y As Range -> SetCell "y" では、A1:B1とかではなく、文字列"y"になる。あと、Val系引数は文字列でよいのかな?
引数をstringにするか、int x0,y0,x1,y1とかで、Range(x0 + ":" + y0)とかにしないと駄目かと。(書式とか文法は脳内変換よろ)
列番号をA1形式に変換するのは、>>102見てほしい。多分常套手段。
さっき書き忘れたけど、ソルブだっけ?はシート必須になるんじゃないかな。
何で、TempとかMacroといった作業シートが必要と思います。
さすがに関数そのものを取り込むのは無理かと。
どっかのHPで見たけど、マジでやる場合は2次方程式のルーチンを書いていたような・・・(これがソルブだよね?)
0123デフォルトの名無しさん
2009/03/06(金) 00:28:08グーグル先生で[vba webクエリ]で上から10件以内でもろヒットなんだが・・・
株系がわんさか出てくるがこれじゃまいか?あまりVBAでやらないと思うが・・・
0124119
2009/03/06(金) 00:32:24ちょっと煮詰まってきまして。。。
セルA1を =EXP(B1)+1*B1
としてSubプロシージャで
Sub solv()
SolverOk SetCell:="A1", MaxMinVal:=3, ValueOf:="0", ByChange:="B1"
SolverSolve Userfinish:=True
End Sub
で解を求めることは確認できたのですが(上のA1をChr(65) & Chr(49)としても大丈夫でした)、
Function test1(x)
SolverOk SetCell:="A1", MaxMinVal:=3, ValueOf:="0", ByChange:="B1"
SolverSolve Userfinish:=True
test1 = x
End Function
についてC1セルを =test1(B1)とすると
「内部エラーが発生しました。またはメモリ不足です。」
となってしまいます。
せっかく回答いただいたのですが、もうすこし考えて見ます。
ソルブはシート必須であれば最適化プログラムを自分で書かないといけないのでしょうか。
0125デフォルトの名無しさん
2009/03/06(金) 01:35:21引数が4個必要だから、fx組み込み関数の用には使えるのかな?ごめん。セル直内のマクロ関数作ったこと無い。
VB6の代わりにしか思ってないから・・
セル = fx(B1, B2, B3, B4)が可能なら、下記Funcの引数を変えればOkかと。
>124の最後は、循環しているから。�@B1=test() �Atest()かB1を読みにいく →つまり、test() �B以下無限ループ。
124の引数の意味は分からんが、下記のようにやればうまくいくのでは?
使い方が良くわからんが頑張ってくれ。仕事あるので寝るよ。
'/**
' * イチローの打率予測計算。Solverの初心者HPのを元にマクロ記録で起こす。
' */
Option Explicit
'テスト関数。
Private Sub test()
Call TestFunc("$B$6", 3, 0.4, "$D$5")
End Sub
'Solverテスト関数。
Private Sub TestFunc( setRange As String, maxMinval As Integer, targetVal As Double, changeRange As String)
SolverOk SetCell:=setRange, _
maxMinval:=maxMinval, _
ValueOf:=targetVal, _
ByChange:=changeRange
SolverSolve Userfinish:=True
End Sub
0126デフォルトの名無しさん
2009/03/06(金) 01:42:47最小インストールかカスタムインストールでVBEを選択肢から外さない限りCDなんか使わんぞ
どうせHDDなんて有り余ってんだから男は黙ってフルインストール
0127デフォルトの名無しさん
2009/03/06(金) 01:44:52Solverが追加アドインだからCD要求受けたのですわ。
基本全インスコだが、2000だからだろうか?基本VB6用でしか使わないから、アドインは良くわからん。
0128デフォルトの名無しさん
2009/03/06(金) 01:49:460129デフォルトの名無しさん
2009/03/06(金) 01:54:19参照設定でSolverいるがなwww俺はそこで10分以上はまったwww
それに、Solver用データがシートに必要だ。
質問者さんは基本データがシートにあるから、このソースで意味は分かる。
まじで眠い。これ以上は誰かよろ
0130デフォルトの名無しさん
2009/03/06(金) 01:58:13外から使うならFuncをPublicでやってくれ。デバッグしかしてないから、Privateで作ってるわ。
0131デフォルトの名無しさん
2009/03/06(金) 02:21:26つーか、本当にユーザー定義関数(ワークシート上から使う関数)作ったことないんだなw
0132デフォルトの名無しさん
2009/03/06(金) 02:29:03(仰るとおりユーザー関数は無知です orz)
Subで作ってる理由はきちんとある。
Solverの結果がレンジの場合があるっぽいので、そういったものを単一セルで表現できるのか?
それが分かりませんでした。
なんで、質問者さんはTestFuncをPublic Functionにして利用してね。
戻り値の書き方は>>124見る限りわかるんだよね?
あとは>>131さんが教えてくれるよ。
歯磨き終わったのでおやすみなさい。
0133119
2009/03/06(金) 07:39:08当方のやりたいイメージは以下のように方程式をfunction内で定義し
ソルバーで解いた解を返すようなプログラムなのです。
Function test(n)
y = Exp(x) + n * x
SolverOk SetCell:="y", MaxMinVal:=3, ValueOf:="0", ByChange:="x"
SolverSolve Userfinish:=True
test = x
End Function
みなさんの回答をもとにまた今晩考えてみます。
0134デフォルトの名無しさん
2009/03/06(金) 11:49:34クレクレは帰れ
0135デフォルトの名無しさん
2009/03/06(金) 15:44:318年以上は悩んでいます。
0136デフォルトの名無しさん
2009/03/06(金) 15:53:090137デフォルトの名無しさん
2009/03/06(金) 15:59:36エクセルシートに以下のように100行2列の表があるんですが、
東京 台東区
千葉 ○○町
〜
これをFormのListBoxに表示していますが、
東京なら東京だけの情報をリスト表示したいのです。
現状はこうなっています。
UserForm_Initialize()内で
lstBox.ColumnCount = 2
lstBox.RowSource = "アドレス!A2:B103"
これを東京または千葉だけのリスト表示にするには
RowSourceをどのように記述すればいいんでしょうか?
他にいい方法などありますか・
0138デフォルトの名無しさん
2009/03/06(金) 16:27:232 1から作る
・AとBのデータ全取得
・コンボボックスでAを表示
・選択データでBを初期化
0139デフォルトの名無しさん
2009/03/06(金) 17:01:26教えていただいたことを調べてみます
0140デフォルトの名無しさん
2009/03/06(金) 17:10:23RowSourceだけではどう記述しても無理
俺だったら連想配列とクラス使って実装するが
100行くらいなら>>138でも十分だな
0141デフォルトの名無しさん
2009/03/06(金) 17:33:13んなモンにClass使うか
サブルーチンで十分
てか、
>100行くらいなら>>138でも十分だな
より、一番簡単なのが連想配列だろjk
0142デフォルトの名無しさん
2009/03/06(金) 17:43:00少なくとも、配列, end(xlup) end(xlleft) for ifは覚えてくれ
0143デフォルトの名無しさん
2009/03/06(金) 17:56:58○○ソートアルゴリズムでソートするってこと?
0144デフォルトの名無しさん
2009/03/06(金) 19:25:59日本語でおk。自前実装しる
0145デフォルトの名無しさん
2009/03/06(金) 19:29:340146143
2009/03/06(金) 22:02:42System.Collections.SortedListは使えなかったがSystem.Collections.ArrayListが
使えた。
というか、自分の勝手な思いこみでコレを使える事を知らなかった。
キモすぎ!デブおた君の >>144 ↓
/ ̄ ̄ ̄ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( 人____)<日本語でおk。自前実装しる
|./ ー◎-◎-) \______________
(6 (_ _) ) カタカタカタ
| .∴ ノ 3 ノ ______
ゝ ノ .| | ̄ ̄\ \
/ \__| | | ̄ ̄|
/ \___ | | |__|
| \ |つ |__|__/ /
/  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕
| | ̄
0147デフォルトの名無しさん
2009/03/07(土) 10:39:55単純に指定フォルダを開くモジュールを作って、プロシージャ(?)で動かしたいんですが、
以下のようにコードを書いても
「ファイルがありません」とエラーになってしまいます。
調べても書き方はあっているように思うんですが、何がいけないかお教え下さい。。。
Private Sub CommandButton1_Click()
Const pass As String = "C:\aaa"
OpenFolder (pass)
End Sub
Public Function OpenFolder(pass As String) As String
Shell "explorer" & pass, vbNormalFocus
End Function
0148デフォルトの名無しさん
2009/03/07(土) 10:46:32あとは
MsgBox "explorer" & pass
でも見て見ろ
そのエラーが当然だと気付くから
つーか、この程度の確認すら出来ないってどうなのよ?
0149デフォルトの名無しさん
2009/03/07(土) 10:49:30ただこれだけの事だったとは非常に恥ずかしい。。。
サンクス
0150デフォルトの名無しさん
2009/03/07(土) 11:27:57VBとVBAって別もの?独立してるかしてないか?
エクセルからシートをフォームに見立ててボタンつけたりなんだってして、
visual basic editor開いてコード書いて・・・って普通のVBのようにモノを作ってもさ、
エクセルからしか起動できないんだよね?
普通にビルドしてexe作って単体で動かすとかはムリ?
0151デフォルトの名無しさん
2009/03/07(土) 11:57:49VBAでは当然ながらexeへのコンパイルは出来ない
多少言語が変わっても良いなら、VB.NETは無料のでexe作れる
これから始めるならVB.NETなりC#.NETなりの方がいいかもな
0152デフォルトの名無しさん
2009/03/07(土) 14:48:03やっぱり無料2008落としてC#がBest
VB.NETやるならC#覚える方がのちのち楽になるよ。書き方同じだし。
0153デフォルトの名無しさん
2009/03/07(土) 14:50:41MSDNの横流しも多いが
0154デフォルトの名無しさん
2009/03/07(土) 15:26:34System.Collections.ArrayListってVBAで使えるの?
.net系の定義だと思うのだが
(スレチだが、>>143の質問方法だと煽らて当然かと)
0155デフォルトの名無しさん
2009/03/07(土) 16:09:480156デフォルトの名無しさん
2009/03/07(土) 16:18:430157デフォルトの名無しさん
2009/03/07(土) 17:02:202000 sp4 .net2.0
office200 sp3
参照設定にmscorlib.dll
Sub Sample1()
Set DataList = CreateObject("System.Collections.ArrayList")
Set DataList = Nothing
End Sub
0158デフォルトの名無しさん
2009/03/09(月) 02:28:43を考えましたが動きません。
if WeekdayName(Weekday(Date))=6 and Hour(Time) >14 then
ActiveSheet.PageSetup.CenterHeader = "&24&B&I"+ Date +1 ’金曜日の2時以降は土曜日の日付のヘッダー
else
ActiveSheet.PageSetup.CenterHeader = "&24&B&I"+ Date ’平日は当日のヘッダー
end if
ActiveSheet.PageSetup.RightFooter = "&36&B&Uテスト"
これのどこが間違っていますか?
環境;
os xp
v 2003
0159デフォルトの名無しさん
2009/03/09(月) 04:14:59Debug.Print WeekdayName(Weekday(Date))
0160デフォルトの名無しさん
2009/03/09(月) 04:19:36Date型を文字列として足す場合は+じゃなくて&を使う
0161デフォルトの名無しさん
2009/03/09(月) 21:23:07最近会社のパソコンが新しくなったのですが
エクセル2003でコードを記入しようとすると
ツール−マクロの次が
セキュリティしか表示されません。
何か原因があるのでしょうか。
0162デフォルトの名無しさん
2009/03/09(月) 21:42:03alt+f11
0163デフォルトの名無しさん
2009/03/09(月) 22:48:59掲示板の行数制限とかあるんで配列の大きさとループの回数を定数にしたんで汎用性ゼロです。
Declare Function timeGetTime Lib "winmm.dll" () As Long
Sub aaa()
T1 = timeGetTime()
ScreenUpdating = False
Dim a(270) As String
Dim si As Integer
Dim s As String
For i = 1 To 10000
w = "A" & (i * 6 - 3)
If Len(s & w) <= 255 Then
s = s & w & ","
Else
a(si) = Left(s, Len(s) - 1)
si = si + 1
s = w & ","
End If
Next
a(si) = Left(s, Len(s) - 1)
Set r = Range(a(0))
For i = 1 To 233 Step 29
Set r = Union(r, Range(a(i)), Range(a(i + 1)), Range(a(i + 2)), Range(a(i + 3)), Range(a(i + 4)), Range(a(i + 5)), Range(a(i + 6)), Range(a(i + 7)), Range(a(i + 8)), Range(a(i + 9)), Range(a(i + 10)), _
Range(a(i + 11)), Range(a(i + 12)), Range(a(i + 13)), Range(a(i + 14)), Range(a(i + 15)), Range(a(i + 16)), Range(a(i + 17)), Range(a(i + 18)), Range(a(i + 19)), Range(a(i + 20)), Range(a(i + 21)), _
Range(a(i + 22)), Range(a(i + 23)), Range(a(i + 24)), Range(a(i + 25)), Range(a(i + 26)), Range(a(i + 27)), Range(a(i + 28)))
Next
Set r = Union(r, Range(a(262)), Range(a(263)), Range(a(264)), Range(a(265)), Range(a(266)), Range(a(267)), Range(a(268)), Range(a(269)), Range(a(270)))
Cells(1, 2) = ((timeGetTime() - T1) / 1000) & "秒"
r.Value = "うにお" '念のためテストデータ書き込み
ScreenUpdating = True
End Sub
0164デフォルトの名無しさん
2009/03/09(月) 23:52:12「実行時エラー'424': オブジェクトが必要です。」のエラーがでるんだけど
後続のIf文で MsgBox "NG" の処理をさせるにはどうコーディングすればいいですか?
そもそも使い方間違ってる?
Public Sub test()
Dim c As Range
Set c = Application.InputBox("", Type:=8)
If c Is Nothing Then
MsgBox "NG"
Else
MsgBox "OK"
End If
End Sub
0165デフォルトの名無しさん
2009/03/09(月) 23:58:250166デフォルトの名無しさん
2009/03/10(火) 00:07:27うまくいきました、ありがとうございます
質問なんですけど、Object型変数が空になるケースがある判定では
On Error Resume Next を事前に書いておくのが一般的なんですか?
0167デフォルトの名無しさん
2009/03/10(火) 00:31:010168デフォルトの名無しさん
2009/03/10(火) 00:32:06普通なんじゃね?
variantで受けて、isobjectとかで分けても、たいして良いこと無いだろうし。
0169166
2009/03/10(火) 00:49:51わかりました、ありがとうございます
variantで受けて、isobjectとかで分けて〜とかもよくわからないので
もうちょい調べてみます
0170デフォルトの名無しさん
2009/03/10(火) 16:05:01でマウスポインタが砂時計にならないのって
どういう原因が考えられるでしょうか?
0171デフォルトの名無しさん
2009/03/10(火) 17:01:300172デフォルトの名無しさん
2009/03/10(火) 20:28:06ScreenUpdating = Falseってなんや?
変数の宣言は強制せなあかん。
0173デフォルトの名無しさん
2009/03/10(火) 20:32:270174デフォルトの名無しさん
2009/03/10(火) 20:51:41今回はチラチラする処理じゃないからたまたま気がつかないかも知らんが、チラチラする処理だと「何で?」となる。
0175デフォルトの名無しさん
2009/03/10(火) 21:06:33ブックオープン時に指定フォルダのvalueを
単純にボタンのキャプションに代入して表示させようと思ったんですが、上手くいきません。
オブジェクトが不正だと言われるんですが何故でしょう。
ボタンダウンの機能として全く同じコードを記述すると問題なく動くんですが。。
0176デフォルトの名無しさん
2009/03/10(火) 21:07:29フォルダじゃなくセルでした。
0177デフォルトの名無しさん
2009/03/10(火) 21:17:59ScreenUpdating = False
だと「表示更新を止める」ではなく
ScreenUpdatingというユーザー定義変数に
Falseを代入するって動作になるって話だろ
しかも表示更新は最後の1回のみなので
表示更新止めても1回、止めなくても1回で意味無い
しかも汎用性無さ過ぎで無価値すぎて泣けてくる
0178デフォルトの名無しさん
2009/03/10(火) 23:56:21Private Sub Workbook_Open()
Dim SH As Worksheet
Set SH = ThisWorkbook.Worksheets("Sheet2")
CommandButton1.Caption = SH.Range(SH.Cells(3, 2), SH.Cells(3, 2)).Value
End Sub
ThisWorkbook(コード)内に記述しています。
色々調べてはみたんですが、どうしても「CommandButton1.Caption〜」の
ところでエラーが出てしまいます。
どうかご教授願います。
0179デフォルトの名無しさん
2009/03/11(水) 00:00:39テキストにしたら
0180デフォルトの名無しさん
2009/03/11(水) 00:07:480181デフォルトの名無しさん
2009/03/11(水) 00:10:48そのソースまんまコピペして実行したら、エラー出ずにちゃんと設定されたぞ
0182デフォルトの名無しさん
2009/03/11(水) 00:13:32一つ書き忘れていました。
sheet1にボタンがあって、
sheet2のセルから文字を読み込みたいんです。
自分はやはり同じくエラーになるんですが。。。
0183デフォルトの名無しさん
2009/03/11(水) 00:20:120184デフォルトの名無しさん
2009/03/11(水) 00:22:06そうするとブックを開いたとき、自動的に読み込まれなくなりません?
モジュールにcaption読み込むコード書いてcallしても同じくエラーでちゃうし・・・
0185デフォルトの名無しさん
2009/03/11(水) 00:27:140186デフォルトの名無しさん
2009/03/11(水) 00:28:14すまね、ぜんぜん読んでなかったよ
Worksheets("Sheet1").CommandButton1.Caption = SH.Range〜 に
どのシートにあるボタンかを指定しないと
0187デフォルトの名無しさん
2009/03/11(水) 00:30:23sheet1(コード)に>>178をそのまま書けって事ですか?
中にmsgbox追加してみたんですが、動いてないんですが・・・
0188デフォルトの名無しさん
2009/03/11(水) 00:31:54ボタンもシートの指定が必要なんですね。。
おかげでやっとうまくいきました。
遅くまでありがとうございます!
0189デフォルトの名無しさん
2009/03/11(水) 07:28:42汎用性がどうのこうのって、Unionを使うこと自体がだめだよ。
いくら工夫したってだんだん入れ物を多きくしていくことに変わりはない。
Unionでまとめて処理するより、小分けに処理した方が速ければ何の意味もない。
だいたいUnionが必要な時ってほとんどないだろ?
まともなやつは使わんよ。
0190デフォルトの名無しさん
2009/03/11(水) 07:38:38CommandButton1.Caption = SH.Range(SH.Cells(3, 2), SH.Cells(3, 2)).Value
なんてのが動くのかよ。
同じセルを指定したとき動くか動かないか試してないが、常識的には
CommandButton1.Caption =SH.Cells(3, 2),Value
もしB3にアドレスを書いてるのであれば
CommandButton1.Caption = SH.Range(SH.Cells(3, 2).Value).Value
のどちらかだろ?
0191デフォルトの名無しさん
2009/03/11(水) 07:42:07ThisWorkbookにのOpenイベントだったのかよ。
それじゃ当然だめだよな。
0192デフォルトの名無しさん
2009/03/11(水) 07:55:190193デフォルトの名無しさん
2009/03/11(水) 07:57:050194デフォルトの名無しさん
2009/03/11(水) 07:58:00MsgBox Range(Cells(3, 2),Cells(3, 2)).Value
で動くには動くけど無駄だから
MsgBox Cells(3, 2).Value
とするのがjsk
0195デフォルトの名無しさん
2009/03/11(水) 07:59:28>>193とかなw
0196デフォルトの名無しさん
2009/03/11(水) 08:01:31Union使わなきゃもっと速く出来るだろ?
0197デフォルトの名無しさん
2009/03/11(水) 08:17:200198デフォルトの名無しさん
2009/03/11(水) 08:19:080199デフォルトの名無しさん
2009/03/11(水) 08:22:160200デフォルトの名無しさん
2009/03/11(水) 08:22:350201デフォルトの名無しさん
2009/03/11(水) 08:26:430202デフォルトの名無しさん
2009/03/11(水) 08:38:420203デフォルトの名無しさん
2009/03/11(水) 11:20:370204デフォルトの名無しさん
2009/03/11(水) 11:24:10Sheet2の行3にデータが何列目まで入っているか知りたいのです。
アクティブなシートなら、マクロの記録で
Set ws = Worksheets(2)
ws.Cells(3, 256).Select
Selection.End(xlToLeft).Select
col = Selection.Column
みたいにして、データが入っている最後の列colを取得できたのですが、
Sheet2をアクティブにせずにやるとエラーします。
どうしたらいいでしょうか?
0205デフォルトの名無しさん
2009/03/11(水) 11:36:430206デフォルトの名無しさん
2009/03/11(水) 20:23:52selectとselectionを削ってつなげると出来上がり。
col = ws.Cells(3, 256).End(xlToLeft).Column
0207デフォルトの名無しさん
2009/03/11(水) 21:24:54右クリックしたときにマクロを起動させることは可能ですか?
左クリックならOnActionプロパティに関数を入力すればOKですが
右クリックやダブルクリックはどうしたら良いのでしょうか?
0208デフォルトの名無しさん
2009/03/11(水) 22:13:07ファイル名(200090311.xls)をつけsheet(2)を移動して保存したいのですがどうすれば良いですか?
0209デフォルトの名無しさん
2009/03/11(水) 22:30:07君が書いてることを、日本語ではなくVBA語で書けば良いだけだよ
0210デフォルトの名無しさん
2009/03/11(水) 22:35:090211デフォルトの名無しさん
2009/03/11(水) 23:43:29.Sheets(2).Move
Workbooks(Workbooks.Count).SaveAs .Path & Replace(ActiveCell, "/", "") & ".xls"
end with
テストしてないから動くかわからん
0212デフォルトの名無しさん
2009/03/11(水) 23:47:37まあ、保存場所は好きなのにしたほうがいいけど。
次のOfficeが出るまで買わないことにしたのでOfficeが手元にない(´・ω・)
0213デフォルトの名無しさん
2009/03/12(木) 00:53:59また5.5なら5.51とか5.59を他のセルにいれたいです VBA可能でしょうか?またどのようにしたらよいでしょうか?
0214デフォルトの名無しさん
2009/03/12(木) 00:54:590215デフォルトの名無しさん
2009/03/12(木) 01:05:130216デフォルトの名無しさん
2009/03/12(木) 01:10:05イベントで、結果セル = 結果セル & 入力セル
あとは>>1★5
0217デフォルトの名無しさん
2009/03/12(木) 09:44:12標準モジュールに打ち込んだ方が良いのでしょうか?
0218デフォルトの名無しさん
2009/03/12(木) 10:03:37全てを対象に、必ずしもどっちかが良いなんてことは無い
あとはクラスも仲間に入れてやれ
0219デフォルトの名無しさん
2009/03/12(木) 19:56:41どうやって今作成したばかりのシートを取得したらよいでしょうか?
0220デフォルトの名無しさん
2009/03/12(木) 20:22:39それなら追加するとき取得します。
Set newsheet = WorkSheets.Add
追加したあとで取得は俺には分らん。
0221デフォルトの名無しさん
2009/03/12(木) 20:34:32ありがとうございます
0222デフォルトの名無しさん
2009/03/12(木) 20:39:01オブジェクトのデフォルトプロパティへの代入及び呼び出しを意味してしまうから。
他言語から入ってきた人間だと間違いやすいね。
0223デフォルトの名無しさん
2009/03/12(木) 20:41:02各シートのCodeNameからSheetの部分を削って、数字を数値に変換して一番大きなのがそうだ。
0224デフォルトの名無しさん
2009/03/12(木) 22:17:10標準コードモジュールに Function を書くと Public/Private によらず
UDF としてプロジェクトの外から参照できてしまうのがうれしくありません.
Function を UDF として公開せずに,
プロジェクト内だけで visible にする方法はありますか?
理由は,意図しない名前空間の汚染を避けたいからです.
Function を ThisWokrbook や Wokrsheet オブジェクト上に置くなど,
論理的な意味が変わってしまうような代替案は NG とさせてください.
また,Application.Caller を調べて,VBA プロジェクト内からの呼び出しか,
ワークシート関数による呼び出しかを区別して,後者を禁止することは可能ですが,
名前は見えたままという意味では同じことです.
なお,Excel のバージョンや OS は特に指定しませんが,
できるだけ cross-platform なアプローチが望ましいです.
0225デフォルトの名無しさん
2009/03/12(木) 22:55:55マクロの一覧に名前が出ないようにするだけならOption Private Module
完全に使えなくする方法は知らん
0226デフォルトの名無しさん
2009/03/12(木) 23:00:39シートにボタンを設置し、ユーザにはどこかセルにファイル等のパスを入力しておけば、
そのボタンからそのパスのファイルを開けるようにしたくコードを作成しています。
今分からないのが、そのパスにエクセルのファイル以外を入力された場合の回避の仕方です。
現状では、ただのstring型にパスを読み込んで受け渡してます。
一応、dir関数を使い、ファイルの有無は調べてオープンしてます。
また、フォルダとファイルのオープンを指定できるようにしたいんですが、
これも1を指定したらファイル、0はフォルダ、みたくしたいんですが、
この場合も0なのにファイルとかの場合のエラー回避がうまくいきません。
どうかご教授願います。
0227デフォルトの名無しさん
2009/03/12(木) 23:01:17該当する人物像は、・・・釣り?
0228デフォルトの名無しさん
2009/03/12(木) 23:05:53Standard Code Moduleに Function をWrittenすると Public/Private にwithout
as UDF としてoutside projectからreferableのがnot good.
Function を UDF としてopenせずに,
just inside project で visible にするwayはthere exists?
because は,not intendedしないnamespaceのpollutionをwanna avoid.
Function を ThisWokrbook や Wokrsheet onto Object or,
logicalなmeaningがhas changedなようなalternative ideaは NG とnot acceptable.
and,Application.Caller をlookup,VBA project内からのinvokeか,
by worksheet function invocation かをcut offして,successor を
restictすることはpossibleですが,
nameはis still visibleというmeaningではsame entirely.
you see,Excel のversionや OS はespeciallyにspecifyしませんが,
as youcan cross-platform なapproachがwe need.
0229デフォルトの名無しさん
2009/03/12(木) 23:16:52>キモイ句読点に、アホっぽい半英語。
どこが?ごく普通に見えるが。
まぁ考えても分からないただ煽るしか出来ない無能なお前は引っ込んでろ。
俺は考えるのはいいがすぐには分からん
0230デフォルトの名無しさん
2009/03/12(木) 23:23:41>>224のことだとわかって納得した
0231デフォルトの名無しさん
2009/03/12(木) 23:25:260232デフォルトの名無しさん
2009/03/12(木) 23:29:020233デフォルトの名無しさん
2009/03/12(木) 23:39:16とか言ってくるやつは大抵バカにされて悔しかった本人
0234デフォルトの名無しさん
2009/03/13(金) 07:21:32通常はFileOpenDialogを使用して、ファイルを選択するんじゃない?
それなら、拡張子やOpenエラー等が解決できる気がする。
それ以外ならWin32APIでファイル属性の確認や、
マジックナンバー調べてファイル別の処理とか。
面倒だから極力やらんけど。
煽りが多いようだがガンガレ!
0235デフォルトの名無しさん
2009/03/13(金) 07:45:20ありがとうございます。
しかしdialogを使うのは毎回自分でファイルの位置を探したり
選択しなきゃいけなくなりますよね?
その手間を省く為に、一つのシートに開くボタンをいくつかまとめて作って
パスを自分で指定したらそれっきりいつでも開けるようにしたいんです。
0236デフォルトの名無しさん
2009/03/13(金) 07:53:03俺ならこーするかな?それしかなくね?
�@ユーザー入力部分に制限。不正ファイル指定不可。
�Aファイル/フォルダ判断はWin32API。FileSystemObjectでもいけるかな?
まぁ、何かしらの制限を強いるしかないでしょ。多分。
0237デフォルトの名無しさん
2009/03/13(金) 08:32:56ちょっと始めたばかりの自分にはレベルが高すぎですかね。。。
ちなみに入力制限は、普通にセルに入力させたいんですが、
それはエクセルに規則制限の設定があるって事ですか?
0238デフォルトの名無しさん
2009/03/13(金) 08:36:58シート入力制限(Excel)&入力インターフェースとエラー制限(VBA)だよ。
初心者さんには厳しいかもしれんね・・・
内容見てると、VBAよりも運用で逃げれそうな面が多いので、
Projectに制限がないなら、運用/仕様で逃げるべき。
仕事なのでそれでは〜!
0239224
2009/03/13(金) 16:48:05Ruby の Duck Typing も最初は抵抗がありましたが、
言語の基本理念に合わせれば幸せになれたように、無駄な抵抗はやめて
VBA ではグローバルな名前空間で一意の名前を使ったほうがよさそうですね
句読点もここの習慣に合わせることにします
半英語 (笑) は確かに悩みの種ですが、カタカナ語は読みづらいし、
英単語を「てにをは」でつなぐくらいなら全英語のほうがまだましです
プログラムを書くときは公開が前提のため、ドキュメントを含め全て英語ですが、
白熱した議論となると英語では正直しんどいんですよね...
これまで Microsoft 独自仕様の言語は避けてきたのですが、
表計算 w/ OOP という計算言語モデルは最近面白いかもしれないと思いつつあります
Excel (w/o VBA) のみでも stochastic なアルゴリズムを使うことで、
割と複雑な問題でも現実的 (?) な労力と計算時間で解けることは確認しました
VBA にも標準で正規表現や SQL パーザなどのライブラリが用意されているようですし
何か面白いことはできないかとくちゃくちゃ遊んでいるところです
0240デフォルトの名無しさん
2009/03/13(金) 17:00:33これを使って将来仕事に生かせるかどうか不安なんだ
書籍見てもどう約竜野かいまいちわからないし
この板にいる名人方は経験値豊富そうだから意見を聞きたい
役に立つのか?
0241デフォルトの名無しさん
2009/03/13(金) 17:46:54手作業では数日がかりでも終わらないデータ集計が
数分で1円の間違いも無くレポートの体裁に整えられるくらいが関の山
0242デフォルトの名無しさん
2009/03/13(金) 17:51:370243デフォルトの名無しさん
2009/03/13(金) 17:53:43すごく役に立つよ
でもどう役立つのかいまいち分らんなら素質ないかも知れんから
使えるやつを捕まえてうまくおだててやらせるすべを覚えときゃいい
そいつが全部やってくれる
0244デフォルトの名無しさん
2009/03/13(金) 19:26:170245デフォルトの名無しさん
2009/03/13(金) 20:05:05プログラムで効率化したところで、彼らには何をやっているのかすら分からないから
一切評価されない。空いた時間以上に無茶振りされて仕事が増えるだけ
そういう意味では役に立たない
0246デフォルトの名無しさん
2009/03/13(金) 21:00:12必要なとき覚える程度ならいいけど
この言語が初めてとか、病気になるよ(笑)
0247デフォルトの名無しさん
2009/03/13(金) 21:10:45ABAPとVB6.0しか実務で扱ってないので、転職先が無い・・・
0248デフォルトの名無しさん
2009/03/13(金) 21:20:210249デフォルトの名無しさん
2009/03/13(金) 21:21:57あとはうまくでっちあげろ
0250デフォルトの名無しさん
2009/03/13(金) 21:22:330251デフォルトの名無しさん
2009/03/13(金) 21:27:05引き継ぐ人間のことを考えると涙しかでないな
0252デフォルトの名無しさん
2009/03/13(金) 21:31:260253デフォルトの名無しさん
2009/03/13(金) 22:27:19あって然るべきものがフツーにない場合が多い
のと、シート毎に行数を取って置くのが面倒だからと隅っこに忍ばせた白文字の行数とかIDとかテラウザス
開発者のちょっとしたお茶目がとんでもない殺意を生み出す
さらに別に無駄に出力してるわけではなく
当然客がいじりたおすわけで忍ばせた文字が残っている保証もなければ
忍文字と内容が一致してるわけもなくさらにフォーマットからいって違う可能性もあるしで
仕様やそこに至った経過をしらんとどうしようもないような要素がさらっと入る
バージョン管理ツールも効かないしね
この言語で綺麗に組むって多分目的からズレてんだろうなってフツーに思うけど引き継ぐのは嫌
0254デフォルトの名無しさん
2009/03/13(金) 22:30:590255デフォルトの名無しさん
2009/03/13(金) 23:22:450256デフォルトの名無しさん
2009/03/13(金) 23:28:31返事が遅くなりました。
アドバイスありがとうございます。
もうちょっと勉強を進めていきたいと思います。
0257デフォルトの名無しさん
2009/03/13(金) 23:51:54Excelなんて集計にしか使わないだろ。
0258デフォルトの名無しさん
2009/03/13(金) 23:56:420259デフォルトの名無しさん
2009/03/14(土) 00:04:19Excelでは何やってんの?
0260デフォルトの名無しさん
2009/03/14(土) 00:28:49くだらない雑談は終わりにしようぜ
0261デフォルトの名無しさん
2009/03/14(土) 04:14:42COMができる仕事ならExcel VBAでも出来る。
これを集計しかできないとか、レポートにしか使い道が無いというのは…。
俺がよくやっていたのはXMLのパージングと生成やらテストデータの作成。
ほかにも死ぬほどの仕事をExcelVBAに叩き込んだ。
たぶん今やってるプロジェクトの数パーセントは俺のマクロだより。
EmacsやPerlと心中するような奴でもExcel VBA覚えるべき。
ExcelVBAはWindowsの糊言語だよ。
0262デフォルトの名無しさん
2009/03/14(土) 04:29:33vbaはあくまでもメインのプログラムとの橋渡しだけにしたいなぁ
バージョン管理も効かないし
作ったはいいけどエクセルデータ触るたびにvbaも修正が必要とかなりそう
0263デフォルトの名無しさん
2009/03/14(土) 04:55:410264デフォルトの名無しさん
2009/03/14(土) 05:31:24できるできないは別として
0265デフォルトの名無しさん
2009/03/14(土) 06:29:45組込マクロ言語から入って単独開発言語を囓り始めた時期に
こういう症状が出ることがある。
基礎が出来てりゃあんなバカな発想はしないんだけどな。
0266デフォルトの名無しさん
2009/03/14(土) 06:34:130267デフォルトの名無しさん
2009/03/14(土) 06:51:010268デフォルトの名無しさん
2009/03/14(土) 07:59:58保守できないのは努力が足りない?
0269デフォルトの名無しさん
2009/03/14(土) 09:13:24いまのとこ数式で事足りてる
0270デフォルトの名無しさん
2009/03/14(土) 10:21:220271デフォルトの名無しさん
2009/03/14(土) 10:27:52これってVBで作ったほうがよくね?って思ってる。
なぜExcelで作ったのかなぞだ。
0272デフォルトの名無しさん
2009/03/14(土) 10:35:250273デフォルトの名無しさん
2009/03/14(土) 11:11:340274デフォルトの名無しさん
2009/03/14(土) 12:01:080275デフォルトの名無しさん
2009/03/14(土) 12:11:440276デフォルトの名無しさん
2009/03/14(土) 12:13:500277デフォルトの名無しさん
2009/03/14(土) 12:48:210278デフォルトの名無しさん
2009/03/14(土) 12:51:280279デフォルトの名無しさん
2009/03/14(土) 15:26:16プログラムを書いたことが無いのかもしれないが、
入出力が変わったら、どんな言語ツールでもプログラムを書き換えるだろ。
0280デフォルトの名無しさん
2009/03/14(土) 15:27:06たくさんマクロが組まれてそうなファイルを手に入れて
分析したいのですが、標準モジュールには簡単なマクロしか
入ってません。
フォームのボタンらしきもので色々動くファイルなのですが
ボタン自体が保護されているような状態。
0281デフォルトの名無しさん
2009/03/14(土) 15:30:39すみません。
0282デフォルトの名無しさん
2009/03/14(土) 17:05:29どんな会社でも、どんな業種でもExcelファイルなら開けるってシェアの大きさは有利だよ。
シェア率って、本当に大切だよ。
0283デフォルトの名無しさん
2009/03/14(土) 17:13:43VBS・・・?
0284デフォルトの名無しさん
2009/03/14(土) 17:17:050285デフォルトの名無しさん
2009/03/14(土) 19:27:11VBEの画面でOと0の見分けがつかんの何とかならんですか?
0286デフォルトの名無しさん
2009/03/14(土) 19:38:320287デフォルトの名無しさん
2009/03/14(土) 19:44:26プロポーショナルフォントじゃ無くせばOK。
例)Pゴシック→ゴシック って意味ね。
0288デフォルトの名無しさん
2009/03/14(土) 19:45:40週明けに早速試してみますありがとうございます
0289デフォルトの名無しさん
2009/03/14(土) 19:58:290290デフォルトの名無しさん
2009/03/14(土) 20:51:35指定した1秒未満の短い時間(0.5秒など)だけマクロを停止させたいと考えています。
Application.Wait メソッドなどでは最短でも1秒は停止しなければならないようですが
これは可能なのでしょうか?
0291デフォルトの名無しさん
2009/03/14(土) 21:00:550292デフォルトの名無しさん
2009/03/14(土) 21:13:03グーグルでVB6をつけて検索すれば大抵のことは解決する。
初心者さんはまずVB6で検索してくれ。
0293デフォルトの名無しさん
2009/03/14(土) 22:28:19Sleepを使う事で解決できました。ありがとうございます。
0294デフォルトの名無しさん
2009/03/15(日) 01:33:190295デフォルトの名無しさん
2009/03/15(日) 01:54:451秒単位に丸めて処理されるから意味無いよ
Application.Wait [NOW()+"0:00:00.1"]
Application.Wait Now()
は同じで
Application.Wait [NOW()+"0:00:00.6"]
Application.Wait [NOW()+"0:00:01"]
も同じ
0296デフォルトの名無しさん
2009/03/15(日) 01:58:360297デフォルトの名無しさん
2009/03/15(日) 02:05:18t1 = Timer
Application.Wait [NOW()+"0:00:00.1"]
Debug.Print Timer - t1
End Sub
0.1103516
0.1000977
0298デフォルトの名無しさん
2009/03/15(日) 02:16:28確実な方法では無いから普通は使わないけど。
0299デフォルトの名無しさん
2009/03/15(日) 03:55:41みんな普通に使ってるようだけど。
0300デフォルトの名無しさん
2009/03/15(日) 07:27:5197%くらいは
0
3%くらいが
0.015625
だった
0301デフォルトの名無しさん
2009/03/15(日) 11:17:35XP, Excel2000,はOK
0302デフォルトの名無しさん
2009/03/15(日) 13:38:34ミリ秒単位ってほぼとれてなくない?
数字の上でどうでてようととれるもんはめちゃくちゃなんだけど?
0ms5msって交互にとれるけどホントか?これ?(笑)
0303デフォルトの名無しさん
2009/03/15(日) 15:02:000304デフォルトの名無しさん
2009/03/15(日) 16:17:21は、うちでも0.1秒前後になるけど、WinAPIのSleepと比べるとものすごくばらつきが大きい。
Sleepだと100回やって100〜104msと100ms未満になることは無かったし超過も僅かだが
Application.Waitは80ms台が数回出たし、超過誤差もSleepの10倍以上。
処理上、僅かな超過が出るのは仕方のないことだし、それは環境にも依存することだが
その超過量が同条件でのSleepより遙かに大きかったり、指定未満になったりするのは
明らかにApplication.Waitの欠陥で、1秒未満の処理がまともに出来ているとは言いがたい結果だな。
因みに環境はWinXP/Excel2003
0305デフォルトの名無しさん
2009/03/15(日) 16:53:42Application.Wait [NOW()+"0:00:00.25"]
だとどう?
0306デフォルトの名無しさん
2009/03/15(日) 16:56:57あるいは、
Application.Wait [NOW()+"0:00:00.0625"]
とか
0307デフォルトの名無しさん
2009/03/15(日) 16:58:0710ミリ秒の精度が必要か?
所詮、いくらSleepの精度が高くてもCPUやメモリなどの競合で
処理の遅延することは避けられないし
0308デフォルトの名無しさん
2009/03/15(日) 17:15:170309デフォルトの名無しさん
2009/03/15(日) 18:09:52>>290は1秒じゃ長いから0.5秒くらいで待ちたいと言ってんだろ?
そのときに0.01秒の誤差なんか気にするか?
0.1秒の誤差も気にならないかも
0310デフォルトの名無しさん
2009/03/15(日) 18:19:03長年ゲームアプリ作ってきた勘
テキトーな間隔でテキトーに止まるとは思うけど
数秒に数回成功するって目安だな
0311デフォルトの名無しさん
2009/03/15(日) 18:44:411秒で待つか0.5秒で待つかで実際やってみると体感的に違うけどな
0312デフォルトの名無しさん
2009/03/15(日) 18:45:47VB系でミリ秒気にするのは病みすぎ
スレッド使える他言語でやれよ
(ActiveX使えとかWindowsじゃ無理とか言うなよw)
0313デフォルトの名無しさん
2009/03/15(日) 19:00:500314デフォルトの名無しさん
2009/03/15(日) 19:19:44上位のコンボボックスの選択しだいで、下位のコンボボックスが空の場合も、値が入っている場合もあります。下位のコンボボックスに値が入っている場合のみ実行したいコードがあるのですが、条件式としてはどのように記述すればいいのでしょうか?
お願いします。
0315デフォルトの名無しさん
2009/03/15(日) 19:26:360316314
2009/03/15(日) 19:32:44ごめんなさい。よく分かりません。
0317デフォルトの名無しさん
2009/03/15(日) 19:47:00だったら、ボタン押した時に2つのボックスの中身を見て判断すれば良いんじゃねーの?
この内容が分からないんなら、コンボボックスの使い方を説明してるHP見たほうが早い。
0318デフォルトの名無しさん
2009/03/15(日) 21:38:22上位のコンボボックスの選択されている値をみればいいんじゃないかな
下位のコンボボックスに値をセットしたり空にしたりする処理があるんだから、
そのための判定式がその処理のとこにあるだろう
0319デフォルトの名無しさん
2009/03/15(日) 21:59:07ttp://www1.axfc.net/uploader/He/
He_205317.xls
Pass : prog
0320314
2009/03/15(日) 22:45:03わざわざ親切にありがとうございました。
私の説明が悪かったのですが、「下位のコンボボックスが空」とういうのは、「ボックスに何も
表示されていない状態」のことではなく、「ボックスに何も表示されていないし、ボックス中に
何の選択肢もない状態」のことなんです。上位に対応する下位がない場合、ボックスを空に
しているのです。「ComboBox2.Text <> ""」という記述は前者のようです。
もしよかったらまた教えてください。
0321デフォルトの名無しさん
2009/03/15(日) 22:53:00どちらにしろTextが空なんだからそのIfでOKだろ?
嫌ならListCountで項目数判定汁
0322314
2009/03/15(日) 23:02:24ありがとうございました。
じぶんなりによく考えて、よく調べたつもりだったんですが・・・
まだまだ初心者の域を抜け出せてないようです。
0323デフォルトの名無しさん
2009/03/15(日) 23:05:29ユーザー入力でCombo Textの空文字判定が曖昧になること心配しているなら、
ComboをReadOnlyにするという方法もある。
まあ頑張って下さい。
0324デフォルトの名無しさん
2009/03/18(水) 22:02:18今まで(2003 xpでは)正当に動いていたマクロが機能していません。
どのように修正したらいいものかさっぱりの状態ですので、教えてください。
よろしく。
sub モジ()
Aマクロ
Bマクロ
Cマクロ
end sub
で、Aマクロの中にapplication.run "dataweb" があるのですが、
webデータ取得(を全くすることなく)前に、 Bマクロにさっさといってしまいます。
0325デフォルトの名無しさん
2009/03/18(水) 22:24:01出来ないなら帰れ
0326324
2009/03/19(木) 00:57:50調べる端緒がほしいので、よろしく。
2003で同期だったものが、2007では非同期になってしまうということです。
そうゆうことはあり得るのでしょうか?
0327デフォルトの名無しさん
2009/03/19(木) 01:07:54Bマクロでブレイクすれば、データが取れるの?
0328324
2009/03/19(木) 01:46:10なお、Aマクロ単独での動きは、2003及び2003互換モードで正常ですが、
2007ではやはり、勝手に先に動きます。
0329デフォルトの名無しさん
2009/03/19(木) 04:04:030330デフォルトの名無しさん
2009/03/19(木) 05:53:09それは同じマシンでもそうなるの?
2007から複数コアCPUがサポートされてるから、そうなる可能性はあるとは思うが
関係ないかもしれないが、一度マルチスレッド計算のオプションはずして試してみては?
0331324
2009/03/19(木) 10:51:062007 XP機で試してみました。ちゃんと正常に動いたことから、
VISTA機でのみ正常に、動作していないことになります。
マルチスレッド計算のオプション外しもやってみましたが、変わり無しです。
なお、VISTA機ではmsgboxだけなら止まるのですが、msgboxの次にendがあったりすると
msgboxは流れています。
inputメソッドも止めることなく、流れていってます。
この症状は、Aマクロの中でも、Bマクロの中でも同様に起こっています。
0333デフォルトの名無しさん
2009/03/19(木) 11:23:15「プロシージャ」と「プロシジャー」
どちらが一般的なのでしょうか。
0334デフォルトの名無しさん
2009/03/19(木) 11:30:570335デフォルトの名無しさん
2009/03/19(木) 13:07:500336デフォルトの名無しさん
2009/03/19(木) 15:41:11と日本語で解釈b
0337デフォルトの名無しさん
2009/03/19(木) 19:56:29msgboxは流れる ってのがよくわからんが、msgboxでok押す前に次の行が実行されてるってことか?
簡単に試したがうちではそうならないし、現象が発生する最低限のコード晒して見たら
0338デフォルトの名無しさん
2009/03/20(金) 05:53:15userFormのTextBoxsに09と入れ、セルに入力すると9になります。
変数(string)代入しても、上手くいきません。
どうしたらいいでしょう?
対象セルの書式設定も文字列にしています。
0339デフォルトの名無しさん
2009/03/20(金) 06:53:59cells(1,1).value = "'" & textbox.value
のように。
0340デフォルトの名無しさん
2009/03/20(金) 07:27:25上手くいきました!
ありがとうございます!
0341デフォルトの名無しさん
2009/03/20(金) 09:30:53対象セルの表示形式が文字列になってれば、おれんとこじゃ09になるけど?
0342デフォルトの名無しさん
2009/03/20(金) 09:35:01あんたの質問内容ってこう見えるよ。何を答えろと・・・
今、車で走ってて道に迷いました。今まで普通に走ってきた道ですが・・・
どうしたらいいでしょう。よろしく。
出発点
ルートA、ルートB、ルートC
到着点
ルートAに看板があるのですが、暗くて分かりません。
Q そもそもどこ走ってる?A 言えません
Q 地図ねーの? A 今までの地図と違うみたいです
Q 誰か近くにいねーの?A 止まってくれません・・・
0343デフォルトの名無しさん
2009/03/20(金) 09:41:47もしくは荒らし
0344デフォルトの名無しさん
2009/03/20(金) 10:00:43一応、エスパースレいってみれば? >>324
0345デフォルトの名無しさん
2009/03/20(金) 10:10:37文字列変換用関数というのもある。こっちの方が便利かと
string str = Format$(123, "00000")
0346デフォルトの名無しさん
2009/03/20(金) 19:39:25Excel VBA アクションゲーム作成入門 Excel 2007/2003/2002 対応
ttp://www.amazon.co.jp/gp/product/4844326864/
0347デフォルトの名無しさん
2009/03/20(金) 22:59:07趣味としてやるには面白いかもしれないけど実用性は低い
0348デフォルトの名無しさん
2009/03/20(金) 23:59:25Excelでやる必要性はない。
0349デフォルトの名無しさん
2009/03/21(土) 00:00:390350デフォルトの名無しさん
2009/03/21(土) 00:40:17俺には丁度いいかも
0351デフォルトの名無しさん
2009/03/21(土) 10:38:52それはあくまで ”出来る” であって、向いてる訳じゃないのよ。
例えば、アクションゲームならばFPSって概念を持ってるFlash(ActionScript)で作った方がいいよね。
衝突判定の関数をVBAで組むならば、ASにはその物ズバリの関数が既にある訳。シェイプが接触したいるかどうかをbooleanで返す。
Flashはドローツールから派生してるんで、シェイプを扱う能力が超高い。現状だと最高峰。
MovieClipって形で、duplicate、attack、色んな複製をしつつ、それら全てにプログラムを組みこむ事も出来る。
リアルタイムで動くタイムラインを、全てのシェイプが保持出来る訳で、ゲームには凄く向いてる。
決してVBAがダメと言ってる訳じゃないよ。VBAが光る分野は別の所。
向き不向きがあるから、それに則る方が良いかも。と言う観点で。
0352デフォルトの名無しさん
2009/03/21(土) 10:42:15やらないで怖がってるだけの奴は馬鹿
なんでもかんでもVBAでやろうとすんな
0353デフォルトの名無しさん
2009/03/21(土) 12:02:050354デフォルトの名無しさん
2009/03/21(土) 13:18:32なに?
>ワークシート上のセルを方眼紙のように正方形にしてどっとに見立てて、ワークシートを
>縮小して表示することで、グラフィックを表現する手法で、セルの1つ1つの背景色が
>そのままドットの色になります。
って
0355デフォルトの名無しさん
2009/03/21(土) 15:49:140356デフォルトの名無しさん
2009/03/21(土) 15:59:420357デフォルトの名無しさん
2009/03/21(土) 17:30:13あってもよさそうだが見たことがない。
みんなワークシートにドット絵を描きたがるのはなんでだろう。
0358デフォルトの名無しさん
2009/03/21(土) 17:54:34座標関係じゃね?セル位置のほうが初心者には直感的。
もしくは、オブジェのNewとか、オブジェクトの一意のID指定がメンドイとか。
個人的には、VBAで2Dゲームは初心者に向いてると思う。
描画の基礎は勉強できるでしょ。
0359デフォルトの名無しさん
2009/03/21(土) 18:06:52スレチだが言語によると思うぞ。俺はVC/JAVA屋でC#に四苦八苦。
さらにDirectXなんかは思想の理解にてこずるし。
まあ、言語というよりはフレームワークの問題だが・・・
あと、半月くらいVB系触らないと構文殆ど忘れるしw
0360デフォルトの名無しさん
2009/03/21(土) 19:53:36アラン・ケイの本に、セルを使って棒グラフを表現する例が載っていたから、
画期的なアイデアと言うほどではないな。
0361デフォルトの名無しさん
2009/03/22(日) 10:30:03出来なく困っています。
最初にB列の任意のセルを一つ選び、
その選んだB列のセルに、常にR24のセルをコピーし
貼り付けたいのですが、色々やりましたが出来ません。
例えば、
セルB28を選び、マクロを実行したらR24をコピーし同じくB28に貼り付ける。
セルB30を選び、マクロを実行したらR24をコピーし同じくB30に貼り付ける。
セルB77を選び、マクロを実行したらR24をコピーし同じくB77に貼り付ける。
たったこれだけのことですが、このマクロの部分が相対参照にしても出来ません。
識者の方宜しくお願い致します。
なお
EXCEL;ver2000
OS:win2000
VBA;多少使えます。
宜しくお願い致します。
0362デフォルトの名無しさん
2009/03/22(日) 10:43:12> VBA;多少使えます。
それはないだろ…
0363デフォルトの名無しさん
2009/03/22(日) 10:55:310364デフォルトの名無しさん
2009/03/22(日) 10:58:01デフォルトプロパティを省くな
0365デフォルトの名無しさん
2009/03/22(日) 10:58:10有難うございます。しかし調べ、いろいろ試し下記のコードを作成したのですが・・・
ActiveCell = Range("R24").Copy
ActiveCell.Offset(30, -2).Range("A1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
End Sub
↑出来ませんでした。R24だと手間が掛かってしまうと思うので、
任意のB列のセルにセルA1の値をコピーし貼り付ける。
という例で結構ですからコードをお願いできないでしょうか?
例えば、
セルB5を選び、マクロを実行したらA1をコピーし同じくB5に貼り付ける。
たったこれだけで良いです。宜しくお願い致します。
0366デフォルトの名無しさん
2009/03/22(日) 11:45:26cell(2,5).interior.colorindex = RGB(255,255,255)
こんな感じだった気がする
0367デフォルトの名無しさん
2009/03/22(日) 12:16:38cell → cells
colorindex → color
0368デフォルトの名無しさん
2009/03/22(日) 12:34:13Sub test()
Cells(1, 1).Copy ActiveCell
End Sub
0369デフォルトの名無しさん
2009/03/22(日) 12:39:14色は関係ないのか。斜め読みスマソ
0370デフォルトの名無しさん
2009/03/22(日) 16:27:59VBAがまったくわかってないようなんで、ヒントじゃなくて完成したマクロを書いといてやる。
Sub Macro1()
ActiveCell = Range("R24")
End Sub
0371365
2009/03/22(日) 17:16:18只今仕事からかえってきました。んでまた仕事ですorz。
報告は後ほどさせて頂きます。
0372デフォルトの名無しさん
2009/03/22(日) 20:25:56プロパティを省略するな。と何回言わせるのだ・・・。
0373デフォルトの名無しさん
2009/03/22(日) 21:30:20「updatelinks」引数の説明の中で、
「リモート参照」と「外部参照」という2つの言葉が出てきました。
「リモート参照」「外部参照」とはどういう意味ですか?
ググってみても出てきませんでした
(T_T;)。
0374デフォルトの名無しさん
2009/03/22(日) 22:19:52ケチつけてるヒマがあったら正解を示せ。と何回言わせるのだ・・・。
0375デフォルトの名無しさん
2009/03/22(日) 22:54:11selection.value=range("A1").value
End sub
A1の値を今選択しているセルの値に
0376デフォルトの名無しさん
2009/03/22(日) 23:03:17今選択しているセルにA1の値を入れると。
ちなみにこの場合はActivecellよりselectionの方がいいと思うよ。
0377デフォルトの名無しさん
2009/03/22(日) 23:08:07え、付けるべきプロパティが解らないの?
コードが根本的に間違っていると言ってるわけじゃないのに
それでも「正解を示せ」と言うからには、それくらいしか思いつかない…
0378365
2009/03/22(日) 23:33:25あれから>>370さんのコードをそのまま頂いたら、
出来ました!!!
>>370さん本当に感謝です。
コードまでそのまま書いてくださり大変助かりました。
しかしこんな簡単なコードで出来るとは、
拍子抜けです。
勉強不足を感じました(汗。感謝。
>>366さん
>>368さん
わざわざ有難うございます。
どうやら私の説明が悪く、
何をしたいのか正確に伝えれなかったみたいです。
アドバイスいただきましたが、
それとはちょっと違いました。
ですが親切に本当に有難うございました。
ではお騒がせしました(ぺこり
0379デフォルトの名無しさん
2009/03/22(日) 23:34:11>>362
0380デフォルトの名無しさん
2009/03/23(月) 00:01:220381365
2009/03/23(月) 00:07:42いえ、>>365の最初
ActiveCell = Range("R24").Copy
で使わせてもらいました。
>>362さん=>>370さん
だと思っていたのですが・・・。
最初に回答を頂いていたようで有難うございます。
しかし、これは「ヒント」だと思ったので、
>>365のような長居コードになってしまいました。
0382デフォルトの名無しさん
2009/03/23(月) 00:08:34なんか本気で自覚がなさそうだから親切に教えてあげるけど、
デフォルトのプロパティがどうとか正解が知りたいんじゃなくて
「煽りがウザイ」って遠回しに言ってるんだと思うぞ。
プログラマーの精神年齢が低いのは世界共通の現象らしく、
とある海外のプログラミングの入門書にも
「まず大人になれ」みたいに書いてあって吹いたわ。
0383デフォルトの名無しさん
2009/03/23(月) 00:10:19>>365ではコピペしようと試みてるのに、destination使ってコピしてる>>368のコードは違うと言いきってるし。
どういうこっちゃ。
だいたいから、なんで .value を省略する馬鹿が多いんだ?
プロパティ省略なんて百害あって一利無しだ。
可読性もひったくれもあったもんじゃない。
0384デフォルトの名無しさん
2009/03/23(月) 00:11:040385デフォルトの名無しさん
2009/03/23(月) 00:11:07省略してることで壁に当たったとき、もう一度勉強しなおせばいいさ
0386デフォルトの名無しさん
2009/03/23(月) 00:11:36マジで。
0387デフォルトの名無しさん
2009/03/23(月) 00:12:03コードが短くなるという利があるでしょ
0388デフォルトの名無しさん
2009/03/23(月) 00:12:210389デフォルトの名無しさん
2009/03/23(月) 00:13:280390デフォルトの名無しさん
2009/03/23(月) 00:14:10横から突っ込むけど
それって利点なのか?w
必要なことを表現してない短縮って百害あ(ry・・・以下ループ
0391デフォルトの名無しさん
2009/03/23(月) 00:15:53今のバージョンでは差が出ないんだよな。
当のMSもデフォルトプロパティの省略は推奨してないんだけど、言うことを聞かない
日曜プログラマが多いから仕様を変更したんかな。
0392デフォルトの名無しさん
2009/03/23(月) 00:19:44エラーになったり関係ない周囲のセルを書き換えたりすることがあるから
もうちょっと丁寧にコーディングした方がいいと思う。
0393デフォルトの名無しさん
2009/03/23(月) 00:19:500394デフォルトの名無しさん
2009/03/23(月) 16:22:07shift-jisで読み込んだファイルをutf-8に変換して
バイナリモードにして.Wirteした後にさらにバイナリデータを追記したいのですが
.Write bytData
.Write chr(10)
とすると'実行時エラー3001'になってしまいます。
どうかご教示よろしくお願いいたします。
With SecondObj
.Position = 0
.Type = adTypeBinary
.Position = 3 '先頭から削除する文字数
bytData = .read
.Write bytData
.Write 追加したい文字列
.SaveToFile saveFile, adSaveCreateOverWrite
.Close
End With
0395デフォルトの名無しさん
2009/03/23(月) 16:42:290396デフォルトの名無しさん
2009/03/23(月) 17:40:17シートにプリントスクリーンで貼り付けた写真や図やらがあるのですが、
定期的に全て削除したいのですが、
VBAでやりたいと思います。
調べたのですが分かりませんでした。
識者の方、ご教授お願い致します。
なおexcel=2000
OS=2000
でう。宜しくお願い致します。
0397デフォルトの名無しさん
2009/03/23(月) 18:51:22まずはそれをそっとささやいて欲しい
0398デフォルトの名無しさん
2009/03/23(月) 19:20:12すいませんでした。
ネットと手持ちの本で調べたのですがのっていません。
自分でやったら、
数式
データ
書式設定
これらは削除できるのですが、
プリントスクリーンの画像だけは残ってしまいます。
0399デフォルトの名無しさん
2009/03/23(月) 21:59:21なんかシートごと消した方がいいような感じの発言ですね
でも一応
For Each shp In ActiveSheet.Shapes
shp.Delete
Next shp
でアクティブなシートのシェイプが全部消えるよ
0400デフォルトの名無しさん
2009/03/23(月) 23:18:54有難うございます!!!
今やったら出来ました。
大感激です!!!!!
本当に有難うございました!
0401デフォルトの名無しさん
2009/03/23(月) 23:44:09>定期的に全て削除したいのですが、
興味本位だけどどういう使い方してんの?
0402デフォルトの名無しさん
2009/03/23(月) 23:54:03オートフィルタで抽出した可視セルの値を配列変数に代入したのですが
うまくいきません。
Sub test()
Dim atai() As Variant
Dim gyo() As intger
Sheets(1).Range("A1").AutoFilter 3, ">0"
ReDim atai(0), gyo(0)
atai(0) = Sheets(1).Range("A2", Range("A2").End(xlDown)).SpecialCells(xlCellTypeVisible).Value
gyo(0) = Sheets(1).Range("A2", Range("A2").End(xlDown)).SpecialCells(xlCellTypeVisible).Count
Sheets(2).Range("A2", "A" & gyo(0)).Value = atai(0)
End Sub
上記のコードではうまく配列に値を代入できません。
どなたかご教授願います。
0403デフォルトの名無しさん
2009/03/24(火) 00:32:50おかしな部分が多すぎて、どこから教えたらいいのか…
自分で考えながら作るのもいいけど、まずはマクロの記録やってみ?
無駄がないように手順を良く考えてから、余計なキーを押さないよう、
余計な場所をクリックしないよう、慎重に操作しながら記録してみて、
それでもできあがったマクロは無駄が多いから、
それを自分で修正していくのがいいと思う。
0404デフォルトの名無しさん
2009/03/24(火) 00:50:110405デフォルトの名無しさん
2009/03/24(火) 01:22:04株です。
ライトカッターって言うソフトで下部のチャートを切り取って、
それで明日の作戦を立てるのですが、
一週間もすると莫大なページを消費してなにが何だかになるので、
今回のVBAが必要になりました。
0406デフォルトの名無しさん
2009/03/24(火) 01:25:55Sub test()
Dim atai() As Variant
Dim gyo As Long
Dim i As Long
Dim R As Range
Sheets(1).Activate
Range("A1").AutoFilter Field:=1, Criteria1:=">0"
Set R = Range("A2", Range("A" & Rows().Count).End(xlUp))
gyo = R.SpecialCells(xlCellTypeVisible).Count
ReDim atai(gyo - 1)
i = 0
For Each C In R.SpecialCells(xlCellTypeVisible)
atai(i) = C.Value
i = i + 1
Next
R.Copy Destination:=Sheets(2).Range("A1")
End Sub
0407デフォルトの名無しさん
2009/03/24(火) 01:31:26少なくとも最初のエラーはマクロの記録で解決するはず
自分で直せる部分は自力でやらせる方針なんで
0408デフォルトの名無しさん
2009/03/24(火) 02:08:30エクセル2003を使ってグラフの散布図作成するマクロを作っているのですが
データの範囲に変数使用する方法が分かりません。
マクロの記録で
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("J4")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R1C3:R300C3"
ActiveChart.SeriesCollection(1).Values = "=Sheet1!R1C1:R300C1"
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
これを作成したあと、グラフの読み込む範囲が今300なのに対して
ここの300を変数に格納した数値を利用して変化させたいのです。
ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R1C3:R300C3"
ActiveChart.SeriesCollection(1).Values = "=Sheet1!R1C1:R300C1"
ここにどのように変数を絡めたらいいのでしょうか。
変数には、行の一番最後を記録しています。
宜しくお願いします。
0409デフォルトの名無しさん
2009/03/24(火) 02:16:47gyou = 300
ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R1C3:R" & gyou & "C3"
ActiveChart.SeriesCollection(1).Values = "=Sheet1!R1C1:R" & gyou & "C1"
とか
0410408
2009/03/24(火) 02:24:39ありがとうございます。
その&の前後の半角スペースが必須なのですね…。
そのやり方を試していたんですが、やっと解決しました。
本当に助かりました!!!
0411デフォルトの名無しさん
2009/03/24(火) 02:31:21誰でも一度ははまったことあるはず。
0412デフォルトの名無しさん
2009/03/24(火) 07:47:150413デフォルトの名無しさん
2009/03/24(火) 22:25:05Excelの機能自体を拡張出来るスクリプトとしては優秀だな。
ワークシート関数で、リアルタイムで正規表現使えるのは便利だYo!
使ってる人多いから、ADDIN、ADDONもネットで簡単に拾えるし楽ちん。
0414デフォルトの名無しさん
2009/03/25(水) 21:39:13forをつかってstr(i)に繰り返しデータを入れるようにして、
複数のボタンのキャプションを設定したいと考えてます。
bt1、bt2、bt3…と一部の数字だけ違うのですが、
上手くループで処理する方法はありますでしょうか。
0415デフォルトの名無しさん
2009/03/25(水) 21:50:13Controls
0416デフォルトの名無しさん
2009/03/25(水) 22:15:32後、追加で知りたいんですが、
空のセルをstring型に取り込むと、空のままだと思うんですが、
それをcase文で判定するには、nullや””じゃうまくいきません。
セルが空の時は何かまた違う値が入るんでしょか?
0417デフォルトの名無しさん
2009/03/25(水) 22:58:00String型変数にEmptyを代入するとNullStringに変換されるので、尚更「Case ""」で問題ない。
因みにNullString(定数:vbNullString)は""と同義ね。
「Case ""」にマッチしないなら、セルが空ではない可能性が高いと思う。
Debug.Print Len(変数)
若しくは
Debug.Print Len(セル)
で、0になるか確認してみそ。0じゃなかったら空セルじゃないってこった。
0418デフォルトの名無しさん
2009/03/25(水) 23:38:31ありがとうございます。
一応、msgboxで確認してました。
今よくよく考えたら、""ではなく、" "にしちゃってたかも知れないです^^;
もうアドバイスを踏まえ、もう一度試してみます!
0419デフォルトの名無しさん
2009/03/25(水) 23:57:58Controls("CommandButton" & "i").Caption = "test"
というのを、ソースに直接書いても動かないんでしょうか?
Me. Controls("CommandButton" & "i").Caption = "test"
にしても動きません。
ネットで探してみても、Moduleに書け的な事もありますが、
Public Sub chg(ByVal i As Integer)
End Sub
の間に書いて、callしても動きません。
どこがいけないでしょうか?
0420デフォルトの名無しさん
2009/03/26(木) 00:08:18Controls("CommandButton" & "i")
だと、ボタン名は
CommandButtoni だぞ。
CommandButton1 なら
Controls("CommandButton" & "i") ではなく
Controls("CommandButton" & i) だ。
こういうのもMsgBoxやDebug.Printで
MsgBox "CommandButton" & "i"
などを確認すればすぐに解ることなので、そういう問題起きたら
動かねーって騒ぐ前に初歩的な確認を行う癖を付けようぜ。
0421デフォルトの名無しさん
2009/03/26(木) 07:42:12書き間違えました。
ソースはしっかりiのみで、””で囲んではないです;;
0422デフォルトの名無しさん
2009/03/26(木) 07:54:11↑このスペースはNGだ。
これも書き間違いなら
Me.CommandButton1.Caption = "test"
が動くか試せ。
0423デフォルトの名無しさん
2009/03/26(木) 07:59:19書き間違いがなくなるし早いだろ
0424デフォルトの名無しさん
2009/03/26(木) 09:28:58「時刻」「日付」をそれぞれセルに書き込むコードを書いたのです。
該当部分のコードは
なのですが、そうしたら、時刻しか現れず、日付が出ません。
あれこれやって見て分かったのですが、
時刻と日付の順序を反対にすると
ActiveCell.Offset(0, -13).Range("A1").Select
Selection.Value = Date
ActiveCell.Offset(0, -14).Range("A1").Select
Selection.Value = Time
こうすると、日付は出るものの、今度は時刻が現れません。
色々試行錯誤をしたのですが、なぜか分からず困っています。
識者の方、何卒ご教授お願い致します。
なお、
excel:2000
OS;win2000です。
宜しくお願い致します。
0425デフォルトの名無しさん
2009/03/26(木) 09:33:11セルの書式
0426424
2009/03/26(木) 09:33:52丸々訂正させてください。丸々1から書き直すと下記になります。
すいません。セルを選択して、選択したところから左側のセルに、
「時刻」「日付」をそれぞれセルに書き込むコードを書いたのです。
該当部分のコードは
ActiveCell.Offset(0, -14).Range("A1").Select
Selection.Value = Time
ActiveCell.Offset(0, -13).Range("A1").Select
Selection.Value = Date
なのですが、そうしたら、時刻しか現れず、日付が出ません。
あれこれやって見て分かったのですが、
コードの時刻と日付の順序を反対にすると
ActiveCell.Offset(0, -13).Range("A1").Select
Selection.Value = Date
ActiveCell.Offset(0, -14).Range("A1").Select
Selection.Value = Time
こうすると、日付は出るものの、今度は時刻が現れません。
色々試行錯誤をしたのですが、なぜか分からず困っています。
識者の方、何卒ご教授お願い致します。
なお、
excel:2000
OS;win2000です。
宜しくお願い致します。
0427デフォルトの名無しさん
2009/03/26(木) 09:45:43間違っても日付と時刻が隣同士にはならないぞ。
とりあえずエスパーすると
ActiveCell.Offset(0, -14).Range("A1").Value = Time
ActiveCell.Offset(0, -13).Range("A1").Value = Date
で良いんじゃないかと思うのだが。
0428424
2009/03/26(木) 09:58:12有難うございます!!!あっけなく出来ました。
感謝です。
しかし、
>そのコードだと日付と時刻のセルの間が12〜13列空くってことは解ってるか?
これは分かってますが、
>間違っても日付と時刻が隣同士にはならないぞ。
え?これがなぜだかサッパリ分かりません。
少なくとも隣り合うと思うのですが。
>>426でも
(0,-14)(0,-13)
と位置を指定したのですから、-14の次の数字は-13ですから、
少なくとも隣り合うと思っていたのですが。。。
一応本は読みました。
私のコードのどこがいけないのか、
もう少しご指摘願えないでしょうか。
0430デフォルトの名無しさん
2009/03/26(木) 10:00:21どうしても使うならば、
if activecell.columns < 13 then
を挟むとかしてエラー回避しないと、何ともお粗末になってしまうよ。
0431デフォルトの名無しさん
2009/03/26(木) 10:04:17↓
if activecell.column < 13 then に訂正。
>>429
ActiveCell.Offset(0, -13).Range("A1").Select
Selection.Value = Date
ActiveCell.Offset(0, -14).Range("A1").Select
Selection.Value = Time
activecell.column が100で開始したとき、
offset(0,-13) で、87 を "select" してるでしょ。
んで、次に offset(0,-14) を "select” してるから、73に書かれる。
select したら activecellの場所変わるでそ。
0432424
2009/03/26(木) 10:14:10>>431
431さんご親切に有難うございます。
>select したら activecellの場所変わるでそ。
そういうことか!!!と思いました。
ご指摘頂きやっと意味が分かりました。
>>431のご説明は、間違えたコードの下にメモとしてコーピーさせて頂きます。
勉強不足を感じました。
本当に有難うございました。
0433デフォルトの名無しさん
2009/03/26(木) 12:39:51subかfunctionがないと言われます。
またMeなどつけてもオブジェクトがおかしいと言われます。
何か宣言しないといけないとかありますか?
0434デフォルトの名無しさん
2009/03/26(木) 17:50:32Controlsはフォーム上のコンポーネントにしか使えない。
ワークシートに貼り付けたボタンの場合はControlsじゃなくて
Worksheets("Sheet1").OLEObjects("CommandButton" & i).Object.Caption = "test"
0435デフォルトの名無しさん
2009/03/26(木) 19:40:44>>414ではコマンドボタンのオブジェクト名が bt1、bt2…だけど、実際のオブジェクト名は?
0436デフォルトの名無しさん
2009/03/26(木) 19:47:13>>434で正解の可能性が高い。
質問するときはエラーメッセージを1文字も間違えずにそのまま書くのが基本だよ。
たとえ意味が通じても、勝手に略しちゃだめ。悪い例→「subかfunctionがない」
それにメッセージをそのまま検索すればたいてい解決方法が見つかる。
0437デフォルトの名無しさん
2009/03/27(金) 00:11:47ブックオープン時に、publicのstringに
セルを読み込んでいます。
最初のうちはうまい事その中身を使えるんですが、
ずっとブックを開いたままにしていると、
気が付いたら変数の中身が変わってるのか、
消えるのか分かりませんが、最初の状態ではなくなってしまいます。
変数に値を入れたものを
ずっと保持しておく事はできないんでしょうか?
0438デフォルトの名無しさん
2009/03/27(金) 00:18:40ありがとうございます!
ご教授頂いた記述でうまくいきました。
>>435
携帯から書き込んでいて面倒だったので省きましたが、実際は普通にCommandButton1です。
0439デフォルトの名無しさん
2009/03/27(金) 02:34:06Option Explicitは書いてある?
0440デフォルトの名無しさん
2009/03/27(金) 07:44:28書いてないです。
それを書けば延々保持され続けるんでしょうか?
0441デフォルトの名無しさん
2009/03/27(金) 09:00:01・任意に代入、初期化
・モジュール内編集
しない限りは保持される。
誤って気付かない内に初期化するコードを書いてる可能性が無いのに不意に初期化されてるなら、
「モジュール内編集」に因るものの可能性が高い。
「モジュール内編集」とは、モジュールレベルの宣言部(Public xxx As Stringとか書いてるところ)
を書き替えるとか、新しいプロシージャを作成・削除するとか(既存のプロシージャ内の編集は非該当)
デザインモードを使用するとかね。
「モジュール内編集」を行ったらモジュールレベル変数が初期化されるのは当然のことでそれはどうしようも無い。
0442デフォルトの名無しさん
2009/03/27(金) 12:41:210443デフォルトの名無しさん
2009/03/27(金) 13:16:520444デフォルトの名無しさん
2009/03/27(金) 13:52:32http://support.microsoft.com/kb/408871/ja
0445デフォルトの名無しさん
2009/03/27(金) 13:56:29・プロジェクトの構造の変更
・コンパイルエラーの発生
・コントロールを削除して [元に戻す] を実行する
ちなみに、そのほかにも初期化されることが経験上あった。
いずれにせよ「何もしてないつもりでも、変数が初期化されることはありうる」という前提で
プログラミングすべきで、意図しない初期化が困る場合は、シートに値を保存するなどを
しておく必要がある。
0446デフォルトの名無しさん
2009/03/27(金) 13:58:27「そのほかにも」の内容は、「なにもしてないつもり」だったので、何なのかは具体的にはわからない。
0447デフォルトの名無しさん
2009/03/27(金) 15:29:130448デフォルトの名無しさん
2009/03/27(金) 22:23:21static
0449デフォルトの名無しさん
2009/03/27(金) 23:01:140450デフォルトの名無しさん
2009/03/27(金) 23:38:26つまりモジュールが初期化されるときは
モジュールレベルのプロシージャも初期化され
プロシージャレベルで保持されるStatic変数も
プロシージャの初期化に伴い当然初期化される
0451デフォルトの名無しさん
2009/03/28(土) 00:23:020452デフォルトの名無しさん
2009/03/28(土) 02:06:03もし選択したセルがA1であれば、B1の値を7にする。
というのは何とかできました。
If ActiveCell = Range("A1") Then
Range("B1").Value = 7
End If
これと似たように
もし選択したセルがA1からA10のいずれかであれば、B1の値を7にする。
というのが出来ず困っています。一応下記のようにしましたが
If ActiveCell = Range("A1:A10") Then
Range("B1").Value = 7
End If
どうしても出来ません。
もし出来なければ、
「選択したセルがA列のいずれかであればB1の値を7にする。」
ということでも良いのですが。
識者の方お力をかしていただけないでしょうか。
宜しくお願い致します。
なおexcel:ver2000
OS:win2000になります。
宜しくお願い致します。
0453デフォルトの名無しさん
2009/03/28(土) 02:34:270454デフォルトの名無しさん
2009/03/28(土) 02:45:24有難うございます!
今日はもう遅いので、明日試させていただき、
追って報告します。
0455452
2009/03/28(土) 02:53:18感謝してます。
しかし出来れば、
「もし選択したセルがA1からA10のいずれかであれば、B1の値を7にする。」
というケースも分かれば嬉しいなと思います。、
どなたか教えていただければ助かります。
0456デフォルトの名無しさん
2009/03/28(土) 03:16:16Range("B7").Value = 7
End If
0457デフォルトの名無しさん
2009/03/28(土) 13:00:11んなクソ簡単な命令くらい自分で調べて作れアホ
0458452
2009/03/28(土) 13:39:05有難うございます!出来ました!助かりました。
>>456
有難うございます!
出来ました。
お二人に助けていただき、エラーを防ぐプログラムが出来るようになりました。
本当に感謝します。
>>457
勘違いしてます。私は既に自分で調べて、試行錯誤して、
それでも分からなかったのでここで聞いてます。
>んなクソ簡単な命令くらい自分で調べて作れアホ
クソ簡単って。。。
自分まだVBA初めて10日ぐらいなんですよ。
あなたにとってはそんな簡単なこと、でも私にとっては
チンプンカンプンで難しいことが一杯あるんですよ。
でもなんとか自分で試行錯誤してるうちに、
これでも最初に比べれば飛躍的に自分で対処できるようになったんですよ。
0459デフォルトの名無しさん
2009/03/28(土) 13:54:26> 自分まだVBA初めて10日ぐらいなんですよ。
>>361
> VBA;多少使えます。
> VBA;多少使えます。
> VBA;多少使えます。
ふ〜ん
0460デフォルトの名無しさん
2009/03/28(土) 13:57:14> ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
> コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
> ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
お前のやってることはまるで教えてクンだ
0461デフォルトの名無しさん
2009/03/28(土) 16:10:190462デフォルトの名無しさん
2009/03/28(土) 17:33:27心のちーせーやろーだなぁw
0463デフォルトの名無しさん
2009/03/28(土) 18:34:21>>437
シートに保持させるのが嫌なら、レジストリに放り込んでおくとか、
CGIでインターネットに変数保管しておくのはどう?
0464デフォルトの名無しさん
2009/03/28(土) 20:22:59>CGIでインターネットに変数保管しておくのはどう?
ネットにつながらない環境の時とか接続に失敗したらどうするのさ
0465デフォルトの名無しさん
2009/03/28(土) 20:41:400466デフォルトの名無しさん
2009/03/28(土) 22:32:230467デフォルトの名無しさん
2009/03/28(土) 23:08:18レジストリに値をってのはやり方は全くわかりませんが、
その動作や処理自体特に問題のないものなんでしょうか?
0468デフォルトの名無しさん
2009/03/28(土) 23:20:46ExcelVBAから触れるレジストリ領域は一か所だけだね。
VBAで触れる部分をどんだけ滅茶苦茶にしても問題は無いと思うけど。
個人的には、レジストリやINIの肥大化が嫌いなんで、
きちんと管理出来ないなら使わない方が良いかも。と思うよ。
レジストリエディタでVBAを介さずに値の削除、書き込みが出来ない内はお勧めしないよ。
今回の状況だと、素直にワークシートに値を書き込んでおくのが良いんじゃないかな。
0469デフォルトの名無しさん
2009/03/28(土) 23:21:360470デフォルトの名無しさん
2009/03/29(日) 01:02:17ありがとうございます。
もう少し色々調べたいと思います。
0471デフォルトの名無しさん
2009/03/29(日) 14:14:12OS ビスタ
Excel2007使用です。
スピンボタンの設定で
LINKEDCELL = TARGET.ADDRESS
という部分をその左隣のセル指定に変更したく色々やりました。
稚拙な質問ですみません。よろしくお願いします。
0472デフォルトの名無しさん
2009/03/30(月) 09:55:25特定のフォルダに「品番」.jpg
A1〜A10に「品番」の羅列
B1〜B10に「品番」.jpgを自動的にセルのサイズに合わせて貼り付け(もし該当するファイルがなければunknown.jpg
A列の品番が変わると自動的に差し替え
現在は
A列にフルパスで参照したい画像のファイル名
挿入の数だけ下記のマクロ作ってやってます
Range("A2").Select
ActiveSheet.Pictures.Insert(Cells(1, 1)).Select
OSはXP エクセルは2003です
宜しくお願い致します
0473デフォルトの名無しさん
2009/03/30(月) 17:44:240474デフォルトの名無しさん
2009/03/30(月) 19:33:18最初考えた時はできなくて現在の妥協案になりまして
やっぱりもう一度やり直そうと考えたんですが、やっぱり挫折・・・
正直、丸投げしました
0475デフォルトの名無しさん
2009/03/30(月) 19:59:32ChangeイベントでTargetやTargetからの相対位置を対象とすれば良し
これで解らなければ、諦めるか、この程度は理解できるレベルまで自分で勉強しろ
0476デフォルトの名無しさん
2009/03/30(月) 20:07:04アプリケーションをwinword.exeを指定した時、
空白を含むパスのファイルが開けません。
C:\test 1\test.txtだと、
file:///test%201/test.txtと記述しないとうまくいきません。
セルからパスを読み込ませ開きたいのですが、
うまく開く方法はないでしょうか?
0477デフォルトの名無しさん
2009/03/30(月) 20:13:47"""C:\test 1\test.txt"""
セルに「C:\test 1\test.txt」と入っているなら
"""" & Range().Value & """"
0478デフォルトの名無しさん
2009/03/30(月) 21:23:54ありがとうございます。
今は外にいるのでまた明日試したいと思いますが、
ご教授頂いた記述はどういった意味になるんでしょうか?
0479デフォルトの名無しさん
2009/03/30(月) 21:33:33ここは初心者スレじゃない
基礎的な構文規則くらい自分で調べろ
0480デフォルトの名無しさん
2009/03/30(月) 22:06:18まぁ俺は答える気ゼロなんだがなw
0481デフォルトの名無しさん
2009/03/30(月) 22:15:01スペース入りのパスを渡す場合には、分割されないようダブルコーテーションで囲む必要がある。
ダブルコーテーションの中にダブルコーテーションを書く場合場、""と書く。
以上をあわせると、
"""abc def"""
"""" & range.value & """"
の意味がわかるはず。
0482デフォルトの名無しさん
2009/03/30(月) 22:15:55変な研究とかの丸投げじゃなきゃ質問に答えてやれよ
どーせ分からないだけだろ
0483デフォルトの名無しさん
2009/03/30(月) 22:22:22偉そうなこと言ってる暇があるならお前が教えてやればいい
それとも質問者本人が煽ってるだけなのかな?
0484デフォルトの名無しさん
2009/03/30(月) 22:22:580485デフォルトの名無しさん
2009/03/30(月) 22:26:30そんなくだらん煽りなんかしないで、お前が答えてやれよ。
0486デフォルトの名無しさん
2009/03/30(月) 22:27:150487デフォルトの名無しさん
2009/03/30(月) 22:41:46A2なのに(1, 1)になる理由とか、、、
>>484はわかるのか。すごいなあ。
0488デフォルトの名無しさん
2009/03/30(月) 22:49:44ご親切にありがとうございます。
0489デフォルトの名無しさん
2009/03/30(月) 22:50:44わかんねーなら黙っとけ糞が
0490デフォルトの名無しさん
2009/03/30(月) 22:53:50当方のレベルは、超簡単なシェルスクリプトぐらいなら作りますが
VBAの文法とか構造がさっぱりわからなくて初学者向けから勉強したいと思ってます。
0491デフォルトの名無しさん
2009/03/30(月) 22:59:250492デフォルトの名無しさん
2009/03/30(月) 23:05:290493デフォルトの名無しさん
2009/03/30(月) 23:11:58書評ってなんで必要だと思う?
0494デフォルトの名無しさん
2009/03/30(月) 23:13:090495デフォルトの名無しさん
2009/03/30(月) 23:22:34つまり>>489自己紹介乙
0496デフォルトの名無しさん
2009/03/30(月) 23:24:28(1) 書評欄を埋めるため
(2) 評論家がゼニをふんだくるため
0497490
2009/03/30(月) 23:46:29>>491
よさそうですね。見てみます。エロゲみたいなタイトルですが
>>492
>>494
実はすでに大村あつしの入門書を見たんですが最初は簡単だったのにいきなりむずかしくなって
自分には合わないなって思いました。
ほかたくさんあったんですがイマイチピンとこずここで聞きました。
0498デフォルトの名無しさん
2009/03/30(月) 23:52:18書評は別に必要ではないだろ
0499デフォルトの名無しさん
2009/03/30(月) 23:56:12がオススメ
大村あつしは知識はあるが根本的にバカなので
こいつの書いた本は素人にはオススメしない
バカな内容に引きずられないだけの基礎スキルを持っていて
知識だけ上乗せしたい中級者以降なら構わないが
0500472
2009/03/31(火) 00:04:55別のイベントで指定すれば良いんですね。やってみます。
0501デフォルトの名無しさん
2009/03/31(火) 00:57:310502デフォルトの名無しさん
2009/03/31(火) 01:13:54changeイベントなんて1文字打ち込むごとに…
0503デフォルトの名無しさん
2009/03/31(火) 01:22:15確定された時にのみ発生する
あとは変更確定されたセルが、目的のセル範囲かで条件分岐して処理すれば良いだけ
0504デフォルトの名無しさん
2009/03/31(火) 08:02:570505デフォルトの名無しさん
2009/03/31(火) 08:04:59著者は誰?
0506デフォルトの名無しさん
2009/03/31(火) 15:10:37--------------------------------------------------------------
NGパターン
Set xmlHttp = CreateObject("MSXML2.XMLHTTP.4.0")
xmlHttp.Open "POST", "https://192.168.1.1:8080/xml/", False
xmlHttp.Send xmlData
--------------------------------------------------------------
--------------------------------------------------------------
OKパターン
Set xmlHttp = CreateObject("MSXML2.XMLHTTP.4.0")
xmlHttp.Open "GET", "https://192.168.1.1:8080/xml/", False
xmlHttp.Send xmlData
-証明書確認画面が出る。(主導ではいを選択)-
Set xmlHttp = CreateObject("MSXML2.XMLHTTP.4.0")
xmlHttp.Open "POST", "https://192.168.1.1:8080/xml/", False
xmlHttp.Send xmlData
--------------------------------------------------------------
POSTでリクエストを出すとエラーが返ります。
GETでサーバ証明書を取得後にPOSTを続けるとエラーが出ないので、証明書関連だと
おもってるのですが、オレオレ証明書でも無視して続行する方法を
教えて頂けないでしょうか。
0507デフォルトの名無しさん
2009/04/01(水) 01:57:32ぐぐれ
0508デフォルトの名無しさん
2009/04/01(水) 15:26:40次の流れのプログラムを作成しました。
1.テキストファイルを読み込み
2.不要データの削除
3.作表(列の追加など)
4.罫線・セルの色付け
プログラム自体は稼働し、結果も希望通りのものができました。
しかし、一度実行した後にもう一度実行すると、初回時に比べて処理時間がかかります。
マクロの最初と最後に、画面更新の停止と解除(screenupdating)も追加してみたのですが、改善にいたりませんでした。
一度ファイルを終了し、再度開きなおした場合の初回はやはり処理は早いです。
そういった現象を回避できる手掛かりを探しています。
ご助言をいただけましたら幸いです。
0509デフォルトの名無しさん
2009/04/01(水) 15:28:500510デフォルトの名無しさん
2009/04/01(水) 15:37:54ありがとうございます。
データの削除は最初に行っています。
(Cells.Delete Shift:=xlUp)
使用しているシートは2つ。(2つとも削除しています)
1.テキストファイルを読み込むシートと読み込んだ後に、
2.別シートにすべてコピーしてから、不要データの削除や罫線処理を行っています。
何度か確認したところ、別シートにコピーしてからの処理が重くなるようです。
0511デフォルトの名無しさん
2009/04/01(水) 16:34:06証明書を入れて回避する方法は探せたけど
認証を無視する方法がみつからない。(回避じゃダメなので)
ぐぐって見つかるサイトがあるならURLを教えてください。
0512デフォルトの名無しさん
2009/04/01(水) 16:36:58とりあえずブックうp
外部に出せないデータとかは、適当な文字列と置き換えていいから
0513デフォルトの名無しさん
2009/04/01(水) 17:08:14ファイルあげてみました。よろしくお願いします。
ttp://uproda.2ch-library.com/lib116394.xls.shtml
DLパスは変更なしです。
外に出せないコードは削除してあります。
しかし一回目早く、2回目以降が遅いという現象はおきます。
何分手探りでVBAやっているため、コードが見づらいと思います。
(基本マクロ記録からいじくっているのが多いです)
よろしくご教授ください。
0514デフォルトの名無しさん
2009/04/01(水) 17:11:57ttp://uproda.2ch-library.com/lib116395.xls.shtml
パス変更なしです。
お願いします。
0515デフォルトの名無しさん
2009/04/01(水) 17:20:32たびたび本当に申し訳ありません。
うまくあがってなかたったので、再度あげました。
ttp://uproda.2ch-library.com/lib116397.xls.shtml
お願いします。
0516デフォルトの名無しさん
2009/04/01(水) 17:29:060517デフォルトの名無しさん
2009/04/01(水) 17:32:07最後にあげたのは全部消したはずなので、大丈夫だと思います。
0518デフォルトの名無しさん
2009/04/01(水) 17:45:18マクロの中に
0519デフォルトの名無しさん
2009/04/01(水) 18:06:53先程削除しました。
今後はあげるのやめときます。
お騒がせしてすいませんでした。
0520デフォルトの名無しさん
2009/04/01(水) 18:55:05お疲れさまでした
0521デフォルトの名無しさん
2009/04/01(水) 19:33:11>データの削除は最初に行っています。
これは、マクロの中でやってるのか?
再実行する前に手で全部削除(コピー残すんじゃなくて)して再実行してみてどうだ
考えられる可能性は、コピーを残すことによりデータ量が増えて遅くなってるとか
空シートのクリアは早いがデータの多いシートのクリアは遅いとか
まあ、まずマクロのどこ(どの命令)が遅いか確認したら?
0522非508
2009/04/01(水) 20:12:53セルでなくシートを削除して、新しいシートで実行すると速度が変わらないので、Excelの仕様の問題かと。
シートの中に何か覚えている部分があるんだろう。
0523デフォルトの名無しさん
2009/04/02(木) 00:40:12ありがとうございました。
その後、メモリの消去の命令とかいろいろ追加してみましたが、やっぱり駄目でした。
仕様ということであきらめてみます。
お見苦しいところを、多々お見せして、申しわけありませんでした。
0524デフォルトの名無しさん
2009/04/02(木) 01:45:51upし続けてくれる?
直ぐ消すと
見てくれる人も見てくれないよ
0525デフォルトの名無しさん
2009/04/02(木) 20:01:170526デフォルトの名無しさん
2009/04/03(金) 00:36:170527デフォルトの名無しさん
2009/04/03(金) 01:45:48ワークシートのセルに関数を入れて
4(=index(〜)とかで4になったもの)
n = ↑のセル
range("a1")=n
とかにするとa1には=index(〜)がそのままはいってしまって。
値(この場合4)にしたいんだがどうすればいいか教えてください。説明が下手で申し訳ありません。
0528デフォルトの名無しさん
2009/04/03(金) 01:59:19マクロの記録でコピペして値のみでできました。
もし他にも方法があったら教えてください。
0529デフォルトの名無しさん
2009/04/03(金) 02:06:10あまりにも日本語の質問が少ないんで
何処か日本以外の国の掲示板に迷い込んだのかと錯覚する…
0530デフォルトの名無しさん
2009/04/03(金) 04:30:14尊敬します。先生と呼ばせてください。
ところで先生は文末に約物だけを付けるのは正しい日本語とみなす派なんですね。
0531デフォルトの名無しさん
2009/04/03(金) 04:34:510532デフォルトの名無しさん
2009/04/03(金) 07:05:430533デフォルトの名無しさん
2009/04/03(金) 19:57:19もうね。メタ文字が入ってると、どんなパターンなのか考えてしまってダメだわ。
0534デフォルトの名無しさん
2009/04/04(土) 01:52:170535デフォルトの名無しさん
2009/04/04(土) 15:28:15だいたい俺んとこじゃそういうふうにならないんだが。
仮にC1に=INDEX(D:D,4)となってて
n=Range("C1")
Range("A1")=n
と.Valueを省略して書いてもA1には値が入るぞ?
0536デフォルトの名無しさん
2009/04/04(土) 16:16:24それをoffice2007のxlsxで開こうとするとエラーになってしまいます。
もちろん保存するときにxlsで保存すれば開けるのですが。
xlsで作ったVBAはあくまでもxlsファイルでしか開けなく
互換性はないのでしょうか?
0537デフォルトの名無しさん
2009/04/04(土) 16:55:47マクロ付きの場合、xlsxではなくxlsmになる。
名前を付けて保存のダイアログのファイルの種類のところから、それ選べ。
0538デフォルトの名無しさん
2009/04/05(日) 09:46:08で、ボタンを押すと、別シートの表の中からセルAと一致
するセルをもつ行のうち最初にみつかったセルの1マス右側のセルにセルBの内容を書き込む・・・
というようなことをVBAでやりたいのですが、
単純化したサンプルでいいんでどういうコードになるか教えていただけませんか
0539デフォルトの名無しさん
2009/04/05(日) 10:28:13オートシェイプ上にカーソルが移動すると
オートシェイプに合わせたデータを表示する
というのプログラムを組みたいのですが
0540デフォルトの名無しさん
2009/04/05(日) 10:32:32With Sheet2
.Range(.Cells(1, 1), .Cells(10, 1)).Find(what:=Sheet1.Cells(1, 1)).Offset(0, 1) = Sheet1.Cells(2, 1)
End With
Sheet2が別シート、Sheet1がボタンがあるシートな。
0541デフォルトの名無しさん
2009/04/05(日) 11:04:03ありがとうございました。
ちなみにセルAとセルBじゃなくて、
列Aと列Bだったとして、
列Aの内容と一致するデータを別シートから検索し、右隣のセルに列Bの
内容を書き込む、みたいな場合はどうなるんでしょうか
0542デフォルトの名無しさん
2009/04/05(日) 11:11:310543デフォルトの名無しさん
2009/04/05(日) 11:48:36シェイプ系には無い
ActiveXオブジェクトには有る
矩形で良いならコントロールツールのイメージオブジェクト使うのが手っ取り早い
凝った形が良いならActiveXオブジェクト作って取り込めば良い
0544デフォルトの名無しさん
2009/04/05(日) 12:38:49無い。けど、マウス座標からObject位置判定を自前でやれば同じことはできる
できたとしても、定義済みシェイプを使う方法が面倒だと思う
シェイプと情報をうまく自動リンクさせる手法の方が難しいと思われ
0545デフォルトの名無しさん
2009/04/05(日) 13:58:180546デフォルトの名無しさん
2009/04/05(日) 13:59:21仕事としての意味で
0547デフォルトの名無しさん
2009/04/05(日) 14:25:50非表示シートって表示できるの?
矛盾した質問で申し訳ない
0548デフォルトの名無しさん
2009/04/05(日) 15:16:03簡単にする方法はありますか?
data(0, 0) = A1.value
data(0, 1) = A2.value
data(1, 0) = B1.value
data(1, 1) = B2.value
data(1, 2) = B3.value
のように一度に格納したいのです
0549デフォルトの名無しさん
2009/04/05(日) 15:21:55出来ない理由でも?
0550デフォルトの名無しさん
2009/04/05(日) 16:05:28Dim ary As Variant
ary = Range(Cells(1, 1), Cells(3, 3)).Value
これで配列に入る。
添え字は1始まり。
0551デフォルトの名無しさん
2009/04/05(日) 16:11:28ありがとうございます
0552デフォルトの名無しさん
2009/04/05(日) 17:01:28拾ってきたソースで非表示シートに値を入れてるのがあって
それを目で追うために見えるようにしたかったんだよ
0553デフォルトの名無しさん
2009/04/05(日) 17:11:410554デフォルトの名無しさん
2009/04/05(日) 17:16:02保守的には書いたほうが良い。書くべき。
けど、VB6に限れば書かない方が速度が速い。もしかしたらVBAも・・・?
まあ、所詮Excelなんで筋違いか。2008は知らん。
0555デフォルトの名無しさん
2009/04/05(日) 17:26:500556デフォルトの名無しさん
2009/04/05(日) 18:06:510557デフォルトの名無しさん
2009/04/05(日) 19:43:34Variantに複数のRangeを代入した際の動きって
どこかにドキュメントとかありますか?
いまいちアレが配列になる理由がわからない。
0558デフォルトの名無しさん
2009/04/05(日) 19:57:49どゆこと?
0559デフォルトの名無しさん
2009/04/05(日) 20:06:05君は複数範囲のRangeオブジェクトのValueプロパティが、配列を返すってことを理解してないだけじゃん。
変数は単にValueプロパティが返した値をそのまま保持しているだけで、Variant型変数に代入したときに
何か変換とかが行われてるわけじゃないし。
0560デフォルトの名無しさん
2009/04/05(日) 20:09:38variantでメモリを確保します
最低16バイトです
そこに配列の値を入れていきます。増えたらVariantが確保してるメモリ量も増大します
終わり
多分可変長ってところでひっかかてるんじゃないかな
0561デフォルトの名無しさん
2009/04/05(日) 20:51:12複数のRangeといったのは、下記のような代入です。
Dim var as Variant
var = [A1:B3]
なんでvarに配列が入るのか不思議だったので聞きました。
(普通に先頭要素の値が文字列として入ると思っていたから)
>>559
うーん、そういうExcelのCOMの作り方であって、
別にVBA的な何かというわけではないのですね。
デフォルトプロパティの動作についてドキュメントないのかな。
CVarでも動作同じなのかな。
0562デフォルトの名無しさん
2009/04/05(日) 20:53:460563デフォルトの名無しさん
2009/04/05(日) 21:32:03デフォルト云々の前に、Variantは不定形型ということを理解すべき。
0564デフォルトの名無しさん
2009/04/05(日) 21:38:540565デフォルトの名無しさん
2009/04/05(日) 22:45:48なにいってんの?ばか?
0566デフォルトの名無しさん
2009/04/05(日) 22:46:10を見てふと思ったんだけど、
やっぱり比較演算子と代入演算子が同じってのは分かりにくいよね。
>>563
ユーザー定義関数なんかで、セル指定or文字 を引数で使うみたいに、
明確にvariantじゃなきゃ条件分岐がしっかり出来ないって用途は限定されるしね。
まぁ、そんな目的だとしてもTypenameあたりでしっかりと何型が入ったかを判定させるべきだと思う。
入れっぱなし、とりあえず問題なく動くからOK。って作り方はわしゃ好まん。
0567デフォルトの名無しさん
2009/04/05(日) 23:10:160568デフォルトの名無しさん
2009/04/05(日) 23:12:10外部マイコンをVBAで制御すればできる
もちろん、マイコンでカレーライスが作れるように設定しておいてくれ
0569デフォルトの名無しさん
2009/04/06(月) 00:27:070570デフォルトの名無しさん
2009/04/06(月) 00:41:36目に見える結果にプログラミング言語は限定されないと思う
しいて言うなら、カレーライス製造装置の制御ソフトの大半がVBAなら、VBAで出来てるといえるのでは?
最悪、かーちゃんにメールするだけでも成立しそうだが
激しくスレチ乙
0571デフォルトの名無しさん
2009/04/06(月) 00:44:000572デフォルトの名無しさん
2009/04/06(月) 01:05:33「それはプリンタに作らせただけだろう」
みたいな話か
0573デフォルトの名無しさん
2009/04/06(月) 06:53:160574デフォルトの名無しさん
2009/04/06(月) 21:04:10セルの値の配列をいっぺんに入れるならVariant型しかないじゃん。
0575デフォルトの名無しさん
2009/04/06(月) 21:38:27別にDouble()やString()を許容してくれてもよさそうに思えるのに。
0576デフォルトの名無しさん
2009/04/06(月) 22:02:15Value As Variant
なんだから、妙でもなんでもなく当然だろ?
というか、配列じゃないときに変換関数も通さず別型の変数に代入できてしまう方が妙だ。
自動型変換なんてのは行われないのが普通だからね。
VB6以前やVBAにどっぷりハマっていると、自動型変換されるのが当然で、プロパティの戻り値を
プロパティの型とは別型の変数に代入できないという当たり前のことが不自然に感じてしまうものなのか?
0577デフォルトの名無しさん
2009/04/06(月) 22:22:28Doubleが返ってくるのをやめてほしい。
Range("A1").ValueTypeみたいなデータ型を調べるプロパティを用意すべき。
0578デフォルトの名無しさん
2009/04/06(月) 22:39:47オブジェクト指向を一から勉強し直せ
0579デフォルトの名無しさん
2009/04/06(月) 22:40:13それはTypeNameが内部型を返すという仕様通りの結果だろ?
結局全てに置いて理解が浅いだけの話じゃん。
そして問題点を指摘しているのではなく、「俺の妄想通りに動かない」とブー垂れてるだけ。
ホント、どうしようもないな。
0580デフォルトの名無しさん
2009/04/06(月) 22:53:11VBAだと暗黙の型変換を禁止する方法ってないよね?
0581デフォルトの名無しさん
2009/04/06(月) 22:55:04何いってんの?馬鹿なの?
0582デフォルトの名無しさん
2009/04/06(月) 23:11:21それ、結構重要だと思うわ
最近のスクリプト言語でも思う
勝手に型変換して書いたソースをなんとか動く形に解釈してしまうのは
俺もダメだわ
0583デフォルトの名無しさん
2009/04/06(月) 23:20:39配列への代入だと型変換してくれない。
なんで統一してくれないの?
0584デフォルトの名無しさん
2009/04/06(月) 23:22:08VBSみたいに、もう型なんてバリアント以外禁止!にすればよかったんだよ
実行環境が勝手に型変換するのは、勝手に型変換するコードを書くからなんだがな
それは問題なんじゃなくて、そういう言語だと理解して使うしかない
0585デフォルトの名無しさん
2009/04/06(月) 23:25:23それって意味あるの?
ValueTypeプロパティがあったとして、
VarType/TypeNameが廃止なら、現状のVarType/TypeNameと何も変わりない。
見た目が変わるだけ。
一方、VarType/TypeNameが存在するとしたら、そっちは何をするんだ?
例えば、Variantであるという戻り値なら、そんなものソースコードを見れば自明だ。
ほかの方法は思いつかない。まさかValueTypeと同じとは言わないだろうし。
0586デフォルトの名無しさん
2009/04/06(月) 23:30:16初心者はよく勉強すること
熟練者は的確なスレをすること
反論だけのキチガイはスルーすること
0587デフォルトの名無しさん
2009/04/06(月) 23:33:360588デフォルトの名無しさん
2009/04/06(月) 23:40:27一番わかりにくいのはRangeオブジェクトだと思う。
よく使われることを想定したためか、かなりの省略が許容されているおかげで誤解も多い。
0589デフォルトの名無しさん
2009/04/06(月) 23:46:17理解度が低かった初心者の頃以外は
0590デフォルトの名無しさん
2009/04/06(月) 23:59:16結合セル時のOffsetとか、Find・FindNextとかはわかりづらいと思った。
0591デフォルトの名無しさん
2009/04/07(火) 00:10:04結局は個人の問題
0592デフォルトの名無しさん
2009/04/07(火) 00:15:090593デフォルトの名無しさん
2009/04/07(火) 00:24:04解ってみれば単純な物だが
0594デフォルトの名無しさん
2009/04/07(火) 00:26:060595デフォルトの名無しさん
2009/04/07(火) 00:31:57論 理 的な思考が出来る人なら問題にはならないけどね。
0596デフォルトの名無しさん
2009/04/07(火) 00:36:170597デフォルトの名無しさん
2009/04/07(火) 00:39:06Set r = Range("a1:b5")
r.Cells(2,1).hogehoge
なんてやつ見るとアフォかと。
0598デフォルトの名無しさん
2009/04/07(火) 00:40:460599デフォルトの名無しさん
2009/04/07(火) 00:49:290600デフォルトの名無しさん
2009/04/07(火) 00:58:52ただの相対参照じゃねーの?
0601デフォルトの名無しさん
2009/04/07(火) 01:07:32複数セルに対するCellsで第二引数まで指定するのは確かにおかしいが
やってる奴は滅多に見ないぞ
複数セルに対するCellsで第一引数のみの指定や
単一セルに対するCellsで第二引数まで指定するのならよく見るが、これらはちゃんと意味有るし
前者は範囲内、若しくは範囲の延長上で右下方向に何番目のセルという指定で
Range("A1:E5").Cells(12)なら、A1:E5の5行5列範囲で右下方向12番目ということで
1 2 3 4 5
6 7 8 9 10
11 12
のような感じで3行2列目のB3を返す
後者はOffsetの初期インデックス違いのようなもので、Offsetが0始まりなのに対して、Cellsが1始まり
Debug.Print Range("A1").Cells(3, 3).Address(0, 0)
Debug.Print Range("A1").Offset(2, 2).Address(0, 0)
因みに前者のような使い方があるので、「(親が)セルの集合だからCellsを使うのはおかしい」って言い方は不適切だな
0602デフォルトの名無しさん
2009/04/07(火) 01:35:18使い分けができてないことだろ
0603デフォルトの名無しさん
2009/04/07(火) 01:40:100604デフォルトの名無しさん
2009/04/07(火) 01:54:34問題としては、使い分けの方法ってか、指針を説明できないってことなんだ
今だから白状するが、俺は初心者の頃は、Cellsは単一セルそのものを返してると思ってた
まあ、だからRangeとCellsの使い分けはあんまり悩まなかったが、かといって
範囲が1×1のレンジ操作はCells使えってのも、なんかちょっと違う気がする
0605デフォルトの名無しさん
2009/04/07(火) 09:06:00r.Cells(2,1).hogehoge じゃなくて
rItem(2,1).hogehogeとかr(2,1).hogehogeって書けって意味だよ。
r.Cells(2,1).hogehoge ってr.Cells.Item(2,1).hogehoge の意味だけどセルの集合にわざわざ再度Cellsを使うのは無駄ってもんだ。
例えばCells(2,1)もCells.Cells.Cells(2,1)も同じセルををさすが、動けばいいってもんじゃねーからな。
EntireRowとかのセルの集合じゃないものにCellsを使うのは意味があるが>>597ではCellsは無意味だね
0606デフォルトの名無しさん
2009/04/07(火) 09:19:440607デフォルトの名無しさん
2009/04/07(火) 11:41:21デフォルトプロパティを省略するなって議論が上の方にあったな
だが実際問題、Cells.Item(2,1)なんて書かないなぁ
デフォルトプロパティがインデクサとして作用するなら普通みんな書かないんじゃない
まあ、そのせいで、Cells(2,1)はプロパティ取得じゃなくて、
Cellsというメソッドを2と1という引数で呼び出してると勘違いしてる時期があった
VBAの入門書とか、そのへんちゃんと解説してるようなのはほとんどないと思う
ちゃんとしたコード読まないと、ちゃんとしたコードかけるようにならないってことだな
ただ、Range.RangeとかCells.Cellsとかは感覚的におかしいと思うんだが
Range.Cellsは感覚的におかしいと思わないんだよなぁ
0608デフォルトの名無しさん
2009/04/07(火) 13:12:17Excel95の頃はCellsはメソッドじゃなかった?
中身は実質変わってないのかな?
0609デフォルトの名無しさん
2009/04/07(火) 15:27:47Range("A1") = "abc"
たとえばこれはオブジェクトでデフォルトプロパティのValueが省略、でいいの?
0610デフォルトの名無しさん
2009/04/07(火) 15:52:480611デフォルトの名無しさん
2009/04/07(火) 17:35:05セルの書式設定の[表示形式]定義が[文字列]かどうか
判断する方法を教えて下さい。
やりたい事は「日付を表すデータ」([表示形式]が[日付]とは限らない)が
元々どのように入力されているか判断したいのです。
具体的には、
文字列で「3/1」、「2009/3」「2009/3/1」と入力されて
いるのか、日付データで「2009/3」等と入力されているのかの
判断方法は、どうすれば良いかということです。
よろしくお願い致します。
0612デフォルトの名無しさん
2009/04/07(火) 17:40:30NumberFormatLocal
0613デフォルトの名無しさん
2009/04/07(火) 22:14:32且つ、"abc"のようなものなら失敗して欲しいです。
CDbl()でよいと思うのですが、"abc"などを渡した場合どのように失敗を通知してくれるのでしょうか?
例外などですか?このときの例外の補足の仕方を教えていただけますか?
宜しくおねがいします
0614デフォルトの名無しさん
2009/04/07(火) 23:24:36でエラートラップ
Err.Numberでエラーの種類しらべてしかるべき処理
はっきりいってVBAのエラー処理はおまけみたいなもんだ
変換してエラーでる可能性があるとわかってるなら、
変換する前に変換元が数字かどうかぐらい自分でチェックするほうがいいと思うぞ
0615デフォルトの名無しさん
2009/04/07(火) 23:34:04それは他の言語とどこが違うの?
0616デフォルトの名無しさん
2009/04/07(火) 23:41:15ありがとうございます。m(_ _)m
アドバイス助かります。自分でエラーチェックすべきか、
オブジェクトの例外スローに期待すべきかも悩んでました。
とりあえず試してみます。
例外が送出され、それを捕らえて上手くメッセージが出せたらそれに越したことはないものですから。。
0617デフォルトの名無しさん
2009/04/08(水) 03:42:55エラー処理ルーチンにうつった場合の、それ以降の処理が非常にややこしくなるんだ
まあ、詳しくは構造化エラー処理あたりでぐぐってみてくれ
で、613はJava系のプログラマか?
VBAで例外スロー、キャッチとか考えんほうがいいぞw
0618デフォルトの名無しさん
2009/04/08(水) 03:50:080619デフォルトの名無しさん
2009/04/08(水) 06:07:310620デフォルトの名無しさん
2009/04/08(水) 10:11:121:
on error resume next
(処理)
if err.number = xxx then
〜
end if
on error goto 0
2:
on error goto eh
(処理)
exit sub/function
eh:
(errで分岐したり処理したりする。resume next で戻ることも出来るが、大体はそのままプロシージャを抜ける。)
0621デフォルトの名無しさん
2009/04/08(水) 10:15:33もしくは負の日付か判断する方法があったら教えてください
isDate(負の日付)や変数 = 負の日付とかするだけでエラーに飛んでしまって・・・
0622デフォルトの名無しさん
2009/04/08(水) 13:07:380623デフォルトの名無しさん
2009/04/08(水) 13:45:02俺のとこじゃDate型の変数にCdate("1872/8/13")を入れてMsgBox IsDate(変数)とすりゃTrueだけどな。
直にMsgBox IsDate(-10000)だとFalseだが。
エラーにはならんな。
0624デフォルトの名無しさん
2009/04/08(水) 14:07:01説明不足でもうしわけないです
表示形式が「日付」のセルに、例えば9999999999って値を打つと
####と表示され、マウスカーソルをあてると「負の日付または時間は####と表示されます。」
と出てきまして、そこの値をvbaの方で参照しようとして落ちているという状況です
(日付型のとこには0〜2958465以外の数値だと日付シリアル対象外でこうなるようで・・・)
関数があれば〜と言いましたが、代入するにしろ引数にするにしろ、
参照した時点で落ちてるので関数があっても意味がないと思い、
結局エラーに行かせた先で判断するようにしました
どうもありがとうございました
0625デフォルトの名無しさん
2009/04/08(水) 14:19:05Value2プロパティが2958465以下かで判断する方法もあるかもね。
ValueプロパティだとオーバーフローのエラーだがValue2だとオーバーフローしないから。
0626デフォルトの名無しさん
2009/04/08(水) 14:59:38知らないプロパティだったんで早速調べてみたんですがこれで行けそうです!
>>625氏の言うとおりの方法で範囲外なら無効な日付とメッセージを出すようにしてみました
出来ればエラーに飛ばしたくないと考えていたので助かりました
どうもありがとうございます!
0627611
2009/04/08(水) 17:37:10レスありがとうございます
0628デフォルトの名無しさん
2009/04/09(木) 00:08:50作成されたものか調べる方法を教えてくれ神ども。
0629デフォルトの名無しさん
2009/04/09(木) 05:48:160630デフォルトの名無しさん
2009/04/09(木) 16:18:51全部xlsだろ。
0631デフォルトの名無しさん
2009/04/09(木) 17:06:50CalculationVersionプロパティじゃダメと言うなら
ttp://support.microsoft.com/kb/178605/ja?spid=1743&sid=579
VBAで書かれてないからそのままコピペじゃ動かないけど
アルゴリズムとしては使えるわけだからそれを参考に組めば良い
バージョン確認部分に置いてVBAで出来ないことはやってないから
0632デフォルトの名無しさん
2009/04/09(木) 18:18:28保護されたセルのキャプションやプロパティを変える方法ってありますか?
0633デフォルトの名無しさん
2009/04/09(木) 18:23:13プロパティ?
それってセルではないのでは?
というか保護されてるのに変えられたら保護されてる意味無いのでは?
単に保護の解除、変更、再保護を自動化したいってなら可能だけどね。
0634デフォルトの名無しさん
2009/04/09(木) 21:01:10ついオブジェクト等のノリで書いてしまいました。
セルのバリューやフォント等です。
使う人には入力不可能にしたいんですが、
一定の状況下では処理で内容を書き換えたりしたいと思ってます。
0635デフォルトの名無しさん
2009/04/09(木) 21:26:130636デフォルトの名無しさん
2009/04/09(木) 23:31:00この機能のおかげでVBAに取っ付き易いし、ヘルプより役に立つときもある
似たような感じで、JAVAとか勉強できないのかね
0637デフォルトの名無しさん
2009/04/09(木) 23:55:16純粋な開発言語では記録する対象が存在しない
Excelのマクロの記録だって、記録されるのはApplication以下のオブジェクトに対する操作だけだろ
0638デフォルトの名無しさん
2009/04/10(金) 00:34:540639デフォルトの名無しさん
2009/04/10(金) 00:46:150640デフォルトの名無しさん
2009/04/10(金) 00:50:280641デフォルトの名無しさん
2009/04/10(金) 01:05:120642デフォルトの名無しさん
2009/04/10(金) 14:35:430643デフォルトの名無しさん
2009/04/10(金) 18:09:16シート上にあるオートシェイプ(テキストボックス)の名前と位置を
VBAで知る方法を教えて下さい。
よろしくお願いします。
0644デフォルトの名無しさん
2009/04/10(金) 20:56:050645デフォルトの名無しさん
2009/04/10(金) 23:52:46VBAを使ってボタンを配置したいのですが、コントロールボックスが灰色になっていて配置できません
これはなぜなんでしょうか?
元々もらったファイルなのでなにか設定されているのでしょうか?
0646デフォルトの名無しさん
2009/04/11(土) 00:59:55enable=true
0647デフォルトの名無しさん
2009/04/11(土) 08:00:40グローバル変数で受け渡すしかないんでしょうか?
ユーザーフォームをクラスにして、それにPublicなメンバ変数を持たせて、
呼び出し側の親フォームは、このユーザーフォームのインスタンスの生存期間中、そのメンバ変数にアクセスしたいとか思ってます。
VBAでも可能なのでしょうか?
0648デフォルトの名無しさん
2009/04/11(土) 08:20:17その文字列自体ではなく、その文字列にマッピングした数字を得ようとする場合、いい方法あります?
Win32だと、LV_ITEM::lParamなんかに、そのアイテムに紐づく任意の値を保持できるじゃん。
そしてListCtrlをソートしたり、アイテムを追加削除した後でも、ユーザが選択した文字列から、それに紐づく任意の値がとれるじゃないですか。
VBAで、ListBoxで、AddItemした場合、追加した順番がそのままListIndexに対応するって考えていい?
ソートしたり(できるか知らんけど)、アイテムを後から削除してまた追加したりすると、ずれる?
0649デフォルトの名無しさん
2009/04/11(土) 09:12:05子で取得した変数を親で呼び出したいって事だよね?
publicを使うとしても、いきなりpublicに子から代入するんだと、拡張性が著しく落ちるんで、
子の処理の最後に、publicに受け渡す方が良いと思う。
>>648
LV_ITEM::lParamをAPIとして呼び出して使えば良いんでない?
0650デフォルトの名無しさん
2009/04/11(土) 09:21:42レスサンクス。
結局Win32のListViewを使うことにしました。
で、
mylistview.ColumnHeaders.Add(0, "_Name", "名前", 50,,)
ってやってみたんだけど(もちろんどっかのサイトのサンプルをぱくって)
これだと文法エラーの赤い表示にされる。。
でもカッコ('('と')')を取り除くとOK。引数の数はどっちでもあってるのになんで(?_?)
VBA難しすぎる。
0651デフォルトの名無しさん
2009/04/11(土) 09:46:03関数とステートメントが区別されていた古代のBASICの名残だと思う。
Callを使えばCall mylistview.ColumnHeaders.Add(0, "_Name", "名前", 50,,)と、
戻り値が無くても括弧を付けて書ける。
0652デフォルトの名無しさん
2009/04/11(土) 10:17:19おおおおおお!!!!
ありがとうございます!!
そういうわけだったのかぁ。。
ぜんっぜん気がつきませんでした
どうもっす!
0653デフォルトの名無しさん
2009/04/11(土) 11:09:30マクロが登録されているオブジェクト(セルではないです)のプロパティ(色やフォントサイズ)
を取得したいのですが、どのように指定すればよいのでしょうか?
やりたいこととしては
青色と赤色と黄色それぞれで塗りつぶしたオートシェイプが1つずつあり
赤色の方にマクロを登録します
青色と黄色のオートシェイプを選んだ状態で
マクロが登録された赤色のオートシェイプをクリックすると
青色と黄色のオートシェイプが赤色に変化する
といったことです
説明不足等がありましたらご指摘ください
よろしくお願いします
0654デフォルトの名無しさん
2009/04/11(土) 21:44:17foreach shape in Selection.Shapes
debug.print shape.name
next
0655デフォルトの名無しさん
2009/04/11(土) 22:16:21レスありがたいのですが
そのマクロを実行すると
オブジェクトはこのプロパティまたはメソッドに対応していません。
と出てしまいます。
foreachはfor eachですよね?
0656デフォルトの名無しさん
2009/04/11(土) 23:26:36赤が押された時に、黄色と青色のシェイプが選択されているかを判定して、
それを通った場合に、赤くした方が良い。
0657デフォルトの名無しさん
2009/04/12(日) 01:29:31選択したセルを自動的に行、列共に罫線で囲い、
選択セル位置が変化したら、次の位置を行、列、共に罫線で囲う。
というプログラムを作っています。それでプログラムを作ったのですが、
半分上手くいき、半分上手くいきません。というのは、
次のセルを選択しても、前のセル位置でつけた罫線が、
残ってしまうのです。
コードは
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
With Target.Cells
Union(.EntireRow, .EntireColumn).BorderAround Color:=RGB(255, 0, 255)
End With
Application.EnableEvents = True
End Sub
です。どなたか、ご指摘願えればなと思います。
また、excel2003 osはxpになります、宜しくお願い致します。
0658657
2009/04/12(日) 01:40:24何時も皆様にお世話になって得るので、
このプログラムは結構便利だと思うので、もし良かったら買いときますので
お役立て下さい。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Borders.ColorIndex = xlColorIndexNone
Application.EnableEvents = False
With Target.Cells
End With
Application.EnableEvents = True
End Sub
こうすれば十字に罫線を引けました。
0659デフォルトの名無しさん
2009/04/12(日) 01:59:370660デフォルトの名無しさん
2009/04/12(日) 02:00:03自前で書く手間を省いて時間を節約したいんだが。
0661デフォルトの名無しさん
2009/04/12(日) 02:17:410662デフォルトの名無しさん
2009/04/12(日) 02:26:410663デフォルトの名無しさん
2009/04/12(日) 02:53:36ttp://www.google.co.jp/search?hl=ja&q=excel+vba+%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA
0664デフォルトの名無しさん
2009/04/12(日) 08:17:00static使うと前のセル情報をstaticに保持しておけるよ。
0665643
2009/04/12(日) 09:05:41レスありがとうございます
0666デフォルトの名無しさん
2009/04/12(日) 10:52:53”実行時エラー(94):Nullの使い方が不正です”って言われます。
Private Function foo() as String
foo = Null
End Function
の様に書いてます。
なぜでしょう、またどうすればいいの?
0667デフォルトの名無しさん
2009/04/12(日) 11:03:19基礎を何も理解してないから。
>またどうすればいいの?
まともに学習すること。
0668デフォルトの名無しさん
2009/04/12(日) 11:37:21MSDNもでかすぎてどこで探したらいいか分からないし
言語仕様を知ってる人に手っ取り早く教えて欲しいです。
教える気がないならレスはいらないです。
0669デフォルトの名無しさん
2009/04/12(日) 11:38:20"null"
0670デフォルトの名無しさん
2009/04/12(日) 11:42:55String型の戻り値にString型以外の値を渡せばエラーになるのは当然のこと
0671デフォルトの名無しさん
2009/04/12(日) 11:43:500672デフォルトの名無しさん
2009/04/12(日) 11:45:11こんなものなくなってくれりゃC++でバリバリかける
よっぽどはええ
0673デフォルトの名無しさん
2009/04/12(日) 12:01:06自分で探したほうがよっぽど早かったww
ほんっとお前ら使えないな。
VBしか出来ないんだろ?どーせww
だからろくに引数の説明も戻り値の説明もない関数インタフェースを載せてるオナニーサイトばっかりなんだよ
戻り値もなけりゃ不定時の動作の説明もエラーの返却方法も書いてない
ゴミみたいなサイトばっかりw言語がゴミだからやってる奴も文系まるだしのゴミばっかw
なにがObjectだよ
COMだろがどーせw
おまえら威張り腐るからにはCOMがVBでどう生成されてるかぐらい書けるんだろーな?
0674デフォルトの名無しさん
2009/04/12(日) 12:19:120675デフォルトの名無しさん
2009/04/12(日) 12:24:09型というものの存在自体を知らないならね
しかし型というものを知っている上で気付かないのは
無知(言語仕様知識が足りない)ではなく単なる馬鹿
0676デフォルトの名無しさん
2009/04/12(日) 13:19:57C++とかどんだけCOMの呼び出しとか
文字列の扱い諸々面倒なんだ…
しかもシートに処理対象のデータ定義とかかけないし…
グルー言語ってご存知?
http://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AB%E3%83%BC%E8%A8%80%E8%AA%9E
0677デフォルトの名無しさん
2009/04/12(日) 19:17:23確かにCは何でも出来るよね。
でも、VBAを使ってる人たちは、VBAが仕事の役に立つからやってるだろうね。
Excel帳票を処理する仕事に対してVBAってスクリプトが一番向いてるのは間違いないよ。
Cは何でも出来るけど、裏を返せば自分で全部やらなきゃいけない。
なんでも出来るけど自分で全部0から作らなきゃいけないって事の裏返しだよ。
Cが向いてる仕事ならCで作れば良いじゃない。
心配しないでも、このスレの連中は特化した言語って言う概念を持ってるから大丈夫。
VBAでゲーム作るって言った馬鹿に対して、Flashで作れ。って返答があったしね。
あと、シェアが高いってのは言語を扱う上で凄く大切だから覚えておくと良いよ。
0678デフォルトの名無しさん
2009/04/12(日) 20:57:38ObjectのつもりでIUnknownを返しても、
ExcelはvtblがIDispatchであることを前提にアクセスしてくる。
0679デフォルトの名無しさん
2009/04/12(日) 23:06:09C++
何おかしなレスしてるのか。
0680デフォルトの名無しさん
2009/04/12(日) 23:55:21宜しくお願い致します。以下、コードは簡単なのですが・・・
Sub 数式ある無し判定()
If Range("AZ27").HasFormula Then
Range("AZ27").Interior.ColorIndex = none
Else
Range("AZ27").Interior.ColorIndex = 13
End If
End Sub
つまり、「AZ27に数式があれば色なし、なければ背景色に色を付ける」
という式なのですが、これをAZ27からAZ330までの行全てに、
適応させねばなりません。
そうすると、end ifの判定を一つのセルに一つ必要で、
そうするとこの式が300個以上必要になり、困っています。
そんなことをせずとも解決する方法があると思うのです。
分かる方、宜しくお願い致します。
excel2003 osはxpになります。
0681デフォルトの名無しさん
2009/04/13(月) 00:09:461,1〜100,100までfor使って走査したら?
0682デフォルトの名無しさん
2009/04/13(月) 00:14:11Dim eachRange as range
For Each eachRange In [AZ27:AZ330]
eachRange.Interior.ColorIndex = IIf(eachRange.HasFormula, none, 13)
Next
0683デフォルトの名無しさん
2009/04/13(月) 00:24:23数値でループするなら
Range("AZ27").Cells(rowIndex, columnIndex)
という相対指定ができたような気がする
うろ覚えだけど
0684デフォルトの名無しさん
2009/04/13(月) 00:27:44>>681
for next を使うということでしょうか。何のことか分かりませんでしたが、
本で調べたら載っていました。これを応用すれば出来そうです。
ありがとうございます。
>>682
ありがとうございます。
親切にコードまで書いていただき感謝しています。
お陰さまで解決しました。本当にありがとうございました。
0685デフォルトの名無しさん
2009/04/13(月) 00:38:36ループの中でIIfは使わないようにした方がいいよ
300くらいならさほど問題にもならないだろうが
IIf関数はIf...Thenステートメントの5〜10倍の時間が掛かるから
0686デフォルトの名無しさん
2009/04/13(月) 01:04:38何時も感心しますわ。マジで、
0687デフォルトの名無しさん
2009/04/13(月) 02:57:17VSTO 使っている人いる?
VBA からの移行のために勉強中。
0688デフォルトの名無しさん
2009/04/13(月) 12:06:36それをstringに格納できないのは良く分からない
>>671
の言うとおり、言語仕様ってことでいいのかな?
0689デフォルトの名無しさん
2009/04/13(月) 12:26:53Debug.Print TypeName(Null)
Debug.Print TypeName("")
0690デフォルトの名無しさん
2009/04/13(月) 12:54:53俺は671じゃないが
その型を定義してるのが言語仕様でなくてなんなのだと?
まさか、型はどんな言語でも必ず同じだとおもってるのか?
>>688
VBAには一応型の観念があるんだが、これが非常にあいまいで
必要に応じて自動的に違う型として扱われたりするんだ
で、NULLは文字列でも数字でもない、特殊な型だと思ってください
VBAではNULLを文字列として評価すると、空文字列("")として評価されます
でもNULLは文字列型ではありません
数字として評価するとゼロになるけど数字型でもありません
0691デフォルトの名無しさん
2009/04/13(月) 12:59:12なるほど、そういうことでしたか
ありがとうございました。
0692デフォルトの名無しさん
2009/04/13(月) 13:28:02型という物が存在することを知っていながら型違いを疑わないのは、
言語仕様という知識の不足ではなく、発想や思考の貧困さが原因
型という物の存在自体を知らずに、型違いによるエラーで悩んでるなら
言語仕様知識の不足と言えるが
0693690
2009/04/13(月) 15:10:57型違いはエラーになるから疑う必要がある、というのは言語仕様の知識なんだが
お前さんVBAの型については詳しいのか?
世の中には型チェックが厳密な言語だけじゃないんだよ
ま、質問関係ないしこれ以上はスレチか
0694デフォルトの名無しさん
2009/04/13(月) 16:17:230695デフォルトの名無しさん
2009/04/13(月) 16:46:20VariantこそがVB!!!
0696デフォルトの名無しさん
2009/04/13(月) 19:46:340697デフォルトの名無しさん
2009/04/13(月) 20:25:54逆に中途半端な気もするが。
0698デフォルトの名無しさん
2009/04/13(月) 20:26:53代入するだけで型変換までしてくれる
0699デフォルトの名無しさん
2009/04/13(月) 21:35:48プリミティブ方とかauto-boxingはアレだけど。ジェネリックはまあ…、ちゃんとしてる。
Perlに関して言えば、変数名について型を宣言できない。(VBScriptやJScriptと同様)
Lispとかも自由だね。ただ値をスロットに埋めるだけだもんね。
型が厳しいっていったらDB2のSQLとか、Haskellとか、OCamlとかかなあ。
OCamlは小数点同士とかの足し算にいちいち配慮するのが面倒。
0700デフォルトの名無しさん
2009/04/14(火) 09:18:19それぞれのボタンにどんなプログラムが割り当てられてるか
確認するにはどうしたらよいでしょうか?
office2007です。
0701デフォルトの名無しさん
2009/04/14(火) 09:57:47コントロールのボタンなら、コントロール名_Clickのはず
0702デフォルトの名無しさん
2009/04/14(火) 11:36:53挿入からフォームのコントロールで作ったボタンなんですが
よくわかりませんでした。
すみません。
0703デフォルトの名無しさん
2009/04/14(火) 11:52:49解らなかったらそこで思考停止する人はここには来ないはずだから>>1★5
0704デフォルトの名無しさん
2009/04/14(火) 12:08:14そのボタンを右クリック→マクロの登録で、一番上に表示される「マクロ名」を見る
0705デフォルトの名無しさん
2009/04/14(火) 14:10:02For Each b In ActiveSheet.Buttons
Debug.Print b.Caption, b.OnAction
Next
End Sub
0706デフォルトの名無しさん
2009/04/15(水) 08:54:32どうもありがとうございます。
ようやくわかりました。
0707デフォルトの名無しさん
2009/04/15(水) 17:54:29マクロ表示でもいけそうな気がする
0708デフォルトの名無しさん
2009/04/15(水) 22:11:57セルの値が変更されたら、文字の色を変更したいと思い
changeイベントで実現出来るのは分かったのですが、
数式が入っているセルは色が変更しませんでした。
どうやったらSumなどの数式が入っているセルも
同じように実現できるのでしょうか?
0709デフォルトの名無しさん
2009/04/15(水) 23:55:13Changeイベントはセルの値が変更されたときに動くイベントだが
数式の入ってるセルは、表示は変わってもセルの値である式は変わらない
だから、トリガーとすべきは数式が入ってるセル自体ではなく、数式が参照しているセル
A1 | 3
A2 | 4
A3 | =A1+A2
で、A3の色を変えたいなら、A1とA2をチェックする
0710デフォルトの名無しさん
2009/04/16(木) 11:35:24ExcelでOpenXML(xlsx)形式が利用可能かどうか調べる方法は無いのでしょうか?
Application.FileConvertersを見ればいいのかと思ったのですが、
Excel2003 + Office2007互換パックの環境でFileConvertersがNullになっていました
0711デフォルトの名無しさん
2009/04/16(木) 16:11:03どっかサーバにマスター置いといて、
そのファイルのバージョンが今自分が開いたのと違ったら、
変わってるコードだけ書き換えるような。
0712デフォルトの名無しさん
2009/04/16(木) 16:46:32拡張子の関連付けを調べたらどうだろう
>>711
モジュールの追加、削除なら可能
あとは工夫次第
0713デフォルトの名無しさん
2009/04/16(木) 20:11:03枠自体を縦にしたいのですが
0714デフォルトの名無しさん
2009/04/16(木) 20:56:43VSTO+clickonce
0715デフォルトの名無しさん
2009/04/16(木) 22:32:49スレタイと>>1をよく読め
0716デフォルトの名無しさん
2009/04/16(木) 22:37:310717デフォルトの名無しさん
2009/04/16(木) 22:45:410718デフォルトの名無しさん
2009/04/18(土) 10:03:26シート上にあるオートシェイプとグラフオブジェクトの数を
知る方法を教えて下さい。
よろしくお願いします。
0719デフォルトの名無しさん
2009/04/18(土) 11:11:44shapes.count
charts.count
0720718
2009/04/18(土) 13:08:51レスありがとうごさいます。
0721デフォルトの名無しさん
2009/04/18(土) 16:49:51出来たら、1行にしてあらわしたいのですが、うまくいきませんでした。
どう修正するのがいいでしょうか?
Range("A5:A20").Copy
Range("F5:F20").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
0722デフォルトの名無しさん
2009/04/18(土) 17:26:48Range("F5:F20").Value = Range("A5:A20").Value
0723デフォルトの名無しさん
2009/04/18(土) 17:36:180724デフォルトの名無しさん
2009/04/18(土) 19:28:02変数に入っている時刻データを、テキストボックスに表示するときに、
「0.622.....」とかじゃなく、ちゃんと時間で表示するにはどうすればよいでしょうか。
0725デフォルトの名無しさん
2009/04/18(土) 19:34:14format
ttp://officetanaka.net/excel/vba/tips/tips110.htm
0726デフォルトの名無しさん
2009/04/19(日) 00:49:08ではないでしょうか。
0727デフォルトの名無しさん
2009/04/19(日) 00:52:12学習の[するの]は
0728デフォルトの名無しさん
2009/04/19(日) 00:53:46VBA覚えたら割と何でもできるから楽だよ
0729デフォルトの名無しさん
2009/04/19(日) 01:10:30ピボットテーブル、MS-Query等ある。
0730デフォルトの名無しさん
2009/04/19(日) 01:13:23それ中級でしょ?
0731デフォルトの名無しさん
2009/04/19(日) 01:17:450732デフォルトの名無しさん
2009/04/19(日) 01:50:170733デフォルトの名無しさん
2009/04/19(日) 01:53:440734デフォルトの名無しさん
2009/04/19(日) 02:04:300735デフォルトの名無しさん
2009/04/19(日) 02:04:55ソルバーとかもそうなるのかね、使ったことないや
0736デフォルトの名無しさん
2009/04/19(日) 02:09:510737デフォルトの名無しさん
2009/04/19(日) 02:18:24>で?
お前の言う中級機能を使ったVBAコードをアップしてみろ。
0738デフォルトの名無しさん
2009/04/19(日) 02:21:070739デフォルトの名無しさん
2009/04/19(日) 02:28:19こういう子は弄らず生暖かく見守ってやるに限る。
0740デフォルトの名無しさん
2009/04/19(日) 02:29:050741デフォルトの名無しさん
2009/04/19(日) 02:31:380742デフォルトの名無しさん
2009/04/19(日) 02:33:540743デフォルトの名無しさん
2009/04/19(日) 02:36:160744デフォルトの名無しさん
2009/04/19(日) 02:40:51その程度か、と言う気もするが、VBAを知らない人間が圧倒的に多いことを考えればそんなもんだと思う。
0745デフォルトの名無しさん
2009/04/19(日) 02:44:330746デフォルトの名無しさん
2009/04/19(日) 02:45:440747デフォルトの名無しさん
2009/04/19(日) 02:47:190748デフォルトの名無しさん
2009/04/19(日) 02:52:40ならないとしたら君は幸せな人だ
0749デフォルトの名無しさん
2009/04/19(日) 02:55:06そして、そうやってほっとけないお前もな。
0750デフォルトの名無しさん
2009/04/19(日) 02:59:170751デフォルトの名無しさん
2009/04/19(日) 03:02:16回りから注目を集めろ、自称上級者。
0752デフォルトの名無しさん
2009/04/19(日) 03:06:380753デフォルトの名無しさん
2009/04/19(日) 03:07:570754デフォルトの名無しさん
2009/04/19(日) 03:13:240755デフォルトの名無しさん
2009/04/19(日) 03:14:460756デフォルトの名無しさん
2009/04/19(日) 03:20:21いくら知識や能力があっても基本的なルールが守れない自称上級者は
どこ行っても嫌われるだけ。
0757デフォルトの名無しさん
2009/04/19(日) 03:21:170758デフォルトの名無しさん
2009/04/19(日) 03:25:00まあ、自称上級者は失うものが大きいから、黙っておけないんだろうな。
こっちは自称上級者に弄られようが、失うものは何もないがな。
0759デフォルトの名無しさん
2009/04/19(日) 03:31:360760デフォルトの名無しさん
2009/04/19(日) 03:34:290761デフォルトの名無しさん
2009/04/19(日) 03:38:440762デフォルトの名無しさん
2009/04/19(日) 04:24:250763デフォルトの名無しさん
2009/04/19(日) 04:34:23csv形式のファイルを読み込むと通常(普通)なら
左からA,B,C、・・・・と並ぶのに
なぜか右からA,B,C、・・・・と並んで表示されます。
エクセル形式のファイルは普通の並びです。
しかしながら、CSV形式のファイルをエクセルのSHEETにペースト
すれば通常の並びです。
CSV形式のファイル表示を通常の並びにする方法を知りませんか?
0764デフォルトの名無しさん
2009/04/19(日) 04:37:44OS:WIN XP
VER:2003
です。
0765デフォルトの名無しさん
2009/04/19(日) 05:28:25VBA関係ない質問はこっち
Excel総合相談所 81
http://pc11.2ch.net/test/read.cgi/bsoft/1239169475/
上級者と愉快な仲間たちはここらへん
【質問不可】Excel総合相談所スレの雑談・議論スレ2
http://pc11.2ch.net/test/read.cgi/bsoft/1151651536/
0766デフォルトの名無しさん
2009/04/19(日) 07:13:11何だ、まだやってたのか、自称上級者。
そんな無意味な書き込みはしなくていいから、早く中級機能を用いたコードを
見せてみろよな。
0767デフォルトの名無しさん
2009/04/19(日) 09:10:29中級:VBAをマクロの記録で使える・ピボットテーブル・関数(indirect・row・ifやvlookupを入れ子で使える)・検索が出来る・オートフィルタ・シリアル値を理解している
上級:VBAをマクロの記録無しで使える・関数(clean・char)・論理和論理積を使える・エクセルの仕様(バグ)を理解している
一般的にはこの程度だろうな
このスレならVBAのマクロの記録ができて初級者、配列やAPIを理解できればで中級者ってところか
0768デフォルトの名無しさん
2009/04/19(日) 09:22:220769デフォルトの名無しさん
2009/04/19(日) 10:49:11表計算の「腕試し問題」を解くのは得意な頭の良い初心者です。
0770デフォルトの名無しさん
2009/04/19(日) 10:53:110771デフォルトの名無しさん
2009/04/19(日) 11:10:310772デフォルトの名無しさん
2009/04/19(日) 12:25:11プライマリ相互運用機能アセンブリ使うのと似たようなものと考えているけど、
実際使ってみたら結構違うんだろうなあ。
0773デフォルトの名無しさん
2009/04/19(日) 12:50:309時前なら、A処理を行うを次のとおり、if文を書いたのですが、判別文が
効いてません。直してください、よろしくおねがいします。
ntime=Now
If ntime <= TimeValue("09:00:00") Then
A処理
End if
0774デフォルトの名無しさん
2009/04/19(日) 12:51:13COM使いこなせれば、ほとんどのVBA技術はググって調べられるだろね。
0775デフォルトの名無しさん
2009/04/19(日) 13:06:42TimeValueの返す日付は、1900年1月1日か2日あたりになるだろうから、
その条件を満たすことはほぼ無いだろ。
ntimeからも時間の部分だけ取り出さないと。
0776773
2009/04/19(日) 13:36:58ntime=Now を ntime=Time と修正したらうまくいきました。
0777デフォルトの名無しさん
2009/04/19(日) 23:35:44VSTO+clickonceについて調べてみたんですが、さっぱりで。。。
ほとんど初心者なんですが、理解しやすいHPがあったら教えて頂きたいのですが、宜しくお願いします。
0778デフォルトの名無しさん
2009/04/20(月) 10:18:32Selection.Copy
Selection.PasteSpecial Paste:=xlValues
この方法だと、条件付書式は値だけにならない事が分かりました。
条件付書式も同様に値に変更する方法ありますでしょうか?
0779デフォルトの名無しさん
2009/04/20(月) 10:37:34yyyy/mm/dd HH:MM:SSを取り出したいのですが
上手い方法はないでしょうか?
例)
2009/04/10 13:55:32 会議出席
2009/04/11 15:30:22 会議終了
0780デフォルトの名無しさん
2009/04/20(月) 12:11:14ありがとうございます
0781デフォルトの名無しさん
2009/04/20(月) 12:34:28ワイルドカード使って検索すればいんじゃない
0782デフォルトの名無しさん
2009/04/20(月) 13:47:18Sub Macro3()
Range("B1").Select
Range("c1") = WorksheetFunction.Text(Selection, Selection.NumberFormatLocal)
End Sub
text関数に一回入れてしまえば良いんじゃないかなぁ
0783デフォルトの名無しさん
2009/04/20(月) 13:47:41これをontimeメソッドを使い、時間になったら実行、というコードを作りました。
しかし、時間になってもならず困っております。コードは下記です。
Sub RSS最終気配値をコピー貼付()
Range("CV27:CV320").Select
Selection.Copy
Range("CU27:CU320").Select
Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
===================================
Sub RSS最終気配値時間で実行()
Application.OnTime TimeValue("13:12:57"), "RSS最終気配値をコピー貼付"
End Sub
以上です。コードのどこかにミスが無いか確認したのですが、分かりませんでした。
ご指摘の方宜しくお願い致します。OSはXP,excelは2003になります。
宜しくお願い致します。
0784デフォルトの名無しさん
2009/04/20(月) 15:07:56→Debug.Print Format(TimeValue("13:12:57"), "yyyy/mm/dd hh:mm:ss")
そんなのとっくの昔に過ぎ去っていて、PCの時計を弄らない限り二度と訪れない
だから当然実行もされない
今日の13:12:57なら、Date + TimeValue("13:12:57")
→Debug.Print Format(Date + TimeValue("13:12:57"), "yyyy/mm/dd hh:mm:ss")
0785デフォルトの名無しさん
2009/04/20(月) 15:53:06783です。謎が氷解しました!!!
教えていただけなかったら、自力ではずっと分かっていなかった思います。
>TimeValue("13:12:57")が返す値とは、1899/12/30 13:12:57
これがサッパリ分かっていませんでした。dateが必要だったのですね(汗
教えていただき大変助かりました。
本当に有難うございます!
0786デフォルトの名無しさん
2009/04/20(月) 16:08:040787デフォルトの名無しさん
2009/04/20(月) 20:45:430788デフォルトの名無しさん
2009/04/20(月) 20:53:55Outlookの新しいプロファイルの作成が開いてしまいます
対処法をご存知の方いらっしゃいましたらご教授お願いします
0789788
2009/04/20(月) 20:55:240790デフォルトの名無しさん
2009/04/20(月) 21:26:54修正パッチ絡みで何かあったのかね?
0791デフォルトの名無しさん
2009/04/20(月) 21:57:27エクセルで 毎日16:50 にコピー&貼り付け をするにはどうすればよろしいでしょうか
0793デフォルトの名無しさん
2009/04/21(火) 07:51:19すぐ上にあったのですね ありがとう一度試してみます
0794デフォルトの名無しさん
2009/04/21(火) 21:36:53黒澤明 七人の侍
木下恵介 笛吹川
周防正行 変態家族兄貴の嫁さん
黒澤明 乱
これをVBAかExcelの機能を使って
シート2に
黒澤明 2
木下恵介 1
周防正行 1
みたいに集計を出したいのですが
そうすればいいのでしょうか?
0795デフォルトの名無しさん
2009/04/21(火) 21:52:45VBA不要なのでスレ違い
0796デフォルトの名無しさん
2009/04/21(火) 21:56:080797デフォルトの名無しさん
2009/04/22(水) 06:16:280798デフォルトの名無しさん
2009/04/22(水) 06:59:35ピボット
0799デフォルトの名無しさん
2009/04/22(水) 14:50:420800デフォルトの名無しさん
2009/04/22(水) 15:03:490801デフォルトの名無しさん
2009/04/22(水) 15:19:13現在の環境は
WindowsXP
Excel2003
なのですが
CDOを利用したメール送信で、SMTPサーバにMicrosoft exchange server
のサーバを使用することってできますか?
また、できるのであれば、その指定方法を教えていただきたいです。
0802デフォルトの名無しさん
2009/04/22(水) 16:20:41>>1★3★4
0803デフォルトの名無しさん
2009/04/22(水) 16:24:21Microsoft exchangeのメール機能はSMTPと互換性がないので無理
0804デフォルトの名無しさん
2009/04/22(水) 16:24:31それではお言葉に甘えて
iはループ用の変数
A,Bはセルから読み込んできた値
xは操作を加えたいセル上の値です
for(i = 0; i <= A; i++)
{
if(x < B * (i+1) )
{x = x - (B*i);
break;}
}
という操作をしたいです。
お願いします。
0805デフォルトの名無しさん
2009/04/22(水) 17:07:49Dim A As Long
Dim B As Double
Dim x As Double
' セルから値を取得
A = Range("A1").Value ' A1セル
B = [A2] ' A2セル
x = Cells(3, 1).Value ' 3行1列目(A3)セル
' お望みの処理(たぶん)
For i = 0 To A
If x < B * (i + 1) Then
x = x - (B * i)
Exit For
End If
Next i
' xをセルに代入
Range("A3").Value = x
0806デフォルトの名無しさん
2009/04/22(水) 18:12:23ありがとうございます。うまくいきました!
因みにこれを行数がたくさんあるデータにあてはめたい場合は(例えば100行まであるデータに当てはめる)
Dim i As Long
Dim j As Long
Dim A As Long
Dim B As Double
Dim x As Double
' セルから値を取得
A = Range("A1").Value ' A1セル
B = [A2] ' A2セル
For j = 1 To 100
x = Cells(j, 2).Value ' j行2列目(Bj)セル
For i = 0 To A
If x < B * (i + 1) Then
x = x - (B * i)
Exit For
End If
Next i
' xをセルに代入
Cells(j, 2).Value = x
Next j
このような感じの書き方で大丈夫でしょうか?
さらに行数が未知のデータに適応させる(空白のセルを判定?してその手前のセルまで上記の操作を適応させる)にはどのようにしたらいいでしょうか?
0807デフォルトの名無しさん
2009/04/22(水) 19:31:15複数行対応はすれでOK
末行取得は
For j = 1 To Cells(Cells.Rows.Count, 2).End(xlUp).Row
0808デフォルトの名無しさん
2009/04/22(水) 22:42:050809デフォルトの名無しさん
2009/04/22(水) 23:19:19第三引数で列数、第四で行数選べるようにすればよかったのに
RANGEめんどくさいよrange
0810デフォルトの名無しさん
2009/04/22(水) 23:46:10そういうときにRange使う奴はバカ
普通はResize使う
Cells(3, 4).Resize(5, 6)
これでCells(3, 4)を基準に5行6列範囲だ
0811デフォルトの名無しさん
2009/04/22(水) 23:54:39あるデータがあるんですけど
印刷範囲の設定、具体的には改ページを綺麗にいれていく方法ってないでしょうか?
0812デフォルトの名無しさん
2009/04/23(木) 00:21:570813デフォルトの名無しさん
2009/04/23(木) 02:49:33「綺麗」ってのは主観なのでプログラミングできない。
客観的な基準、ルールが必要。
0814デフォルトの名無しさん
2009/04/23(木) 07:44:41ありがとう!普通に知らなかったわw
0815デフォルトの名無しさん
2009/04/23(木) 09:10:17rowheightを足して行って、○○になったら改行ってやればいいと思うよ。
0816デフォルトの名無しさん
2009/04/23(木) 09:33:520817デフォルトの名無しさん
2009/04/23(木) 12:47:020818デフォルトの名無しさん
2009/04/23(木) 12:48:52行の高さによっても全然違うだろよ。
改ページプレビューで、デフォルト何行で改ページされてるか数えればいいじゃん。
0819799
2009/04/23(木) 15:53:14ありがとうございます。
若干目標と違う結果になってしまったのでEnd(xlDown)でやってみました。
>>808
>一つのメソッドの中でセルの指定の仕方がこうも違う
値取得の際にRangeとCellsが混じっているということでしょうか?
これは統一できるところは揃えた方がいいのですか?
>>809
改善方法があるようでしたらご教授いただきたいです。
申し訳ありませんが初心者なので出来ましたら具体的にお願いします。
0820デフォルトの名無しさん
2009/04/23(木) 17:17:17と配列宣言し、fornext等で処理を行い、配列に値を格納しました
この値をセル(A1:C3)に入れるにはどうすればよいでしょうか?
fornextでcells(i,j)等とし、配列の値を順次入れていくんでしょうか
0821デフォルトの名無しさん
2009/04/23(木) 17:28:23Range("A1:C3").Value = a
0822デフォルトの名無しさん
2009/04/23(木) 17:44:09アリガトーゴザマース!!
0823デフォルトの名無しさん
2009/04/23(木) 18:24:16エクセルのワークシートは2次元配列を視覚化した物だから、
2次元配列と凄く相性良いから覚えておくと良いよ。
複数シート使えば3次元配列も簡単に展開できるしね。
0824デフォルトの名無しさん
2009/04/23(木) 19:43:19二次元配列で大量のデータを一気に転送できるこの方法は特に重要だな。
VBAでも速度を稼ぎたければ十分使う価値はある。
0825デフォルトの名無しさん
2009/04/23(木) 20:20:20一度拡大率を最大にして書き込んで元に戻すと超速いよ
そんなことしなくても描画更新停止ってある?(笑)
0826デフォルトの名無しさん
2009/04/23(木) 20:23:47一応言っておく
おまえらチビるなよ
0827デフォルトの名無しさん
2009/04/23(木) 20:36:20Function Test(arg1 , arg2)
End Functionと会った場合
Test("aaa" , "bbb")
と実行するとエラーになってしまいます
引数が一つなら問題なく動くのですが
二つになるとどうしても動かなくなるんでしょうか?
0828デフォルトの名無しさん
2009/04/23(木) 20:56:45あきらめろ
0829デフォルトの名無しさん
2009/04/23(木) 21:00:52Function Test(arg1 As String, arg2 As String)
End Function
か?
0830デフォルトの名無しさん
2009/04/23(木) 21:14:09コンパイルエラー:
構文エラー
になります
0831デフォルトの名無しさん
2009/04/23(木) 21:15:37Call Test("aaa" , "bbb")
Test "aaa" , "bbb"
Dim ret
ret = Test("aaa" , "bbb")
もしかしてこういうことかも
つーか、エラーが出たって言う奴は、なんでどういうエラーが出たか書かないんだ?
0832デフォルトの名無しさん
2009/04/23(木) 21:25:51Application.ScreenUpdating = Falseでも不十分?
0833デフォルトの名無しさん
2009/04/23(木) 21:26:120834デフォルトの名無しさん
2009/04/23(木) 21:27:44むしろ違うやり方を聞きたいくらいだ。
forでまわして1セルずつとか言って笑わせんなよ?
0835デフォルトの名無しさん
2009/04/23(木) 21:34:08ThisWorksheet使えば?
0836デフォルトの名無しさん
2009/04/23(木) 21:35:54コレクションはオブジェクトの集まり
いっぺんに処理できた方が便利なことが多いからコレクションが使えるようになってる
初心者は知らずにループ回して一つずつ処理することがある
0837デフォルトの名無しさん
2009/04/23(木) 22:07:20コピーしたワークシートに好きな名前をつける
ここまではできるのですがワークシート名に任意の日付をつける事は
できないでしょうか?1日や20090401など日付ならとくに表示形式にはこだわらないのですが
0838デフォルトの名無しさん
2009/04/23(木) 22:12:12指定した場所にコピーされる訳だ。
コピーされたシートの場所は、indexで調べられる。
日付を取得する。
sheets(X).name = 日付
で名前を変更出来る。
コピー先+1の名前変えても良いし、好きにやって良いんだぜ。
0839デフォルトの名無しさん
2009/04/23(木) 22:17:09がんばってみます
0840デフォルトの名無しさん
2009/04/23(木) 23:17:40やっぱ、あるんだ・・・そうだよねw
ありがとうございます
明日、試してみます〜
0841デフォルトの名無しさん
2009/04/24(金) 13:42:19Dim a
Dim i As Long, j As Long, k As Long
a = Range("a1:k100")
For i = 2 To 15
For j = 2 To 15
If a(i, j) = 0 Then
End If
Next
Next
End Sub
If a(i, j) = 0 Thenでインデックスの範囲を超えていますとエラーてが出ます・・
助けてください!
0842841
2009/04/24(金) 13:43:09k列(12列目)を超えてるってことなんですね、失礼しました
0843デフォルトの名無しさん
2009/04/24(金) 14:46:39何かいい解決法があれば教えて欲しいです…
よろしくお願いします。
0844デフォルトの名無しさん
2009/04/24(金) 21:19:00って何?
COM(CreateObjectや参照設定するやつ)の話じゃなくて?
0845デフォルトの名無しさん
2009/04/24(金) 23:38:59この際言ってしまいますが、この問題が出るのはAozoraGetterという青空文庫にあるファイルを一括でダウンロードするという
excelのマクロを利用したアプリケーションです。
IE6の頃にはちゃんと動作していたのに
IE8にアップデートしてからは何故かマクロがうまく動作してくれません。
何故うまくいかないのかデバッグで確かめてみるとどうやら
>HTMLソース = IEオブジェクト.Document.Body.InnerHtml
がIE8だと対応できていないようなのです。そんな命令知りませんみたいな事を言われます。
0846デフォルトの名無しさん
2009/04/25(土) 00:01:25それはCOMコンポーネントっていうVBA用ってわけじゃない汎用コンポの質問になるからね。
それとinnerHTMLの提議も間違ってるから、ちゃんと勉強しようね。
「innerHTMLで出来ることの1つ」と「innerHTMLは〜です」という提議は別物だからね。
0847デフォルトの名無しさん
2009/04/27(月) 11:23:43Counter = Counter + 1
"hoge" & Counter = バリアント型のデータ
hoge1
hoge2
hoge3と処理したいんです。
0848デフォルトの名無しさん
2009/04/27(月) 11:41:10hoge(Counter) = バリアント型のデータ
0849デフォルトの名無しさん
2009/04/28(火) 05:38:00A1に1 A2に2 A3に3、、、と入力した際に
A1からA3までの数字を足してC1に合計を表示するVBAを作ってみたのですが
Aの列に入力するたびにアクティブセルがC1になってしまうようになってしまいました
処理が終わったら自動的に直前まで作業していたセルに戻ってくるようにしたいのですがどのようにしたらいいのか教えていただけないでしょうか
よろしくお願いいたします
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:A10")) Is Nothing Then
Exit Sub
Else
Dim Counter As Integer
Dim Total As Integer
Total = 0
Counter = WorksheetFunction.CountA(Range("A1:A10"))
Range("A1").Select
For i = 0 To Counter - 1
Total = ActiveCell.Offset(i, 0).Value + Total
Next
Range("C1").Value = Total
End If
End Sub
0850デフォルトの名無しさん
2009/04/28(火) 06:04:37誤Excel200
正Excel2000
誤アクティブセルがC1になってしまう
正アクティブセルがA1になってしまう
でしたごめんなさい
0851デフォルトの名無しさん
2009/04/28(火) 07:29:49これはわかってるかも知れないが、セルをSelectしたらアクティブセルも変わる。
単一セルのSelectは、「Range("A1").Activate」と同じだからね。
とりあえず質問の件の目的を達するだけなら
Range("A1").Select
を消して
Total = ActiveCell.Offset(i, 0).Value + Total
↓
Total = Range("A1").Offset(i, 0).Value + Total
もしくは
For i = 0 To Counter - 1
Total = ActiveCell.Offset(i, 0).Value + Total
↓
For i = 1 To Counter
Total = Cells(i, 1).Value + Total
かな。
直前まで作業していたセルに『戻る』のではなく、最初からアクティブセルを変更せずに処理を行う。
どうしても途中でアクティブセルを変更する必要があって後から戻したいなら、処理に入る前(Total = 0の前当たり)に
Dim bActiveCell As Range
Set bActiveCell = ActiveCell
というように処理前のActiveCellを変数に保持して、処理が終わったて(Range("C1").Value = Totalの後当たり)から
bActiveCell.Activate 'と、『処理前に保持したActiveCell(bActiveCell変数)』をアクティブにする命令を出す。
まぁ、ぶっちゃけこのコードなら
If Not Intersect(Target, [A1:A10]) Is Nothing Then [C1].Value = WorksheetFunction.Sum([A1:A10])
の一行でも事足りると思うが、>>849はテスト段階で、実際にやりたいことは違うんだろうからな。
他にもいろいろ言いたいことはあるが、少しずつ覚えていったらいいさ。
君は、ちゃんと環境も書いてるし、コードも端折らず全部書き、まともな日本語で質問している優良質問者なのでこういうのは大歓迎だよ。
まともな人ならそんなの当たり前だと思ってくれるのだろうが、そんな当たり前のことが出来ない奴が多くてね。
0852デフォルトの名無しさん
2009/04/28(火) 07:42:13Private Sub Worksheet_Change(ByVal Target As Range)
Range("C1") = Val(Range("A1").Value) + Val(Range("A2").Value) + Val(Range("A3").Value)
End Sub
0853デフォルトの名無しさん
2009/04/28(火) 08:45:06初心者をからかうなよ
0854デフォルトの名無しさん
2009/04/28(火) 08:53:41For i = 1 To Counter
Total = Cells(i, 1).Value + Total
Next
0855デフォルトの名無しさん
2009/04/28(火) 08:57:58For i = 1 To Counter
Total = Range("A" & i).Value + Total
Next
0856デフォルトの名無しさん
2009/04/28(火) 09:06:04End Sub
0857デフォルトの名無しさん
2009/04/28(火) 09:09:51詳しく書いていただきありがとうございました
処理前に保持したActiveCellを元に戻して上手く直前に戻ることができました
>>852
ありがとうございます
足すことが目的ではなく元のセルに返ってくる方法が何かないかと思い質問させていただきました
0858デフォルトの名無しさん
2009/04/28(火) 09:10:57Dim Total As Integer
Total = 0
For Each R In Range("A1:A10")
Total = R.Value + Total
Next
0859デフォルトの名無しさん
2009/04/28(火) 10:15:59Sub dd()
Dim r
Dim c
r = ActiveCell.Row
c = ActiveCell.Column
'処理
Cells(r, c).Select
End Sub
こんなんでいいの?
0860デフォルトの名無しさん
2009/04/28(火) 11:17:390861デフォルトの名無しさん
2009/04/28(火) 15:49:02Selection.EntireRow.Copyで出来る事はわかったのですが、
列方向を使用している分だけをコピーすると少し時間短縮されるので
列方向を(下記例だとA〜H列に)変更する方法がありますでしょうか?
例1)選択アドレス[$C$2:$C$3,$C5] -> [$A$2:$H$3,$A$5:$H$5]
例2)選択アドレス[$2:$3,$5] -> [$A$2:$H$3,$A$5:$H$5]
例3)選択アドレス[$C$2:$D$3,$C$5:$D$5] -> [$A$2:$H$3,$A$5:$H$5]
0862デフォルトの名無しさん
2009/04/28(火) 18:37:25SpecialCells(xlLastCell) → Ctrl+Shift+End や
CurrentRegion → Ctrl+Shift+: とか
cells(1,256).end(xltoleft).row あたりで
最終の列を取得するなんてどう?
0863デフォルトの名無しさん
2009/04/28(火) 20:13:58Debug.Print Intersect(Selection.EntireRow, [A:H]).Address
0864デフォルトの名無しさん
2009/04/29(水) 09:44:352003と同じような記録マクロを取る方法はないですか?
0865デフォルトの名無しさん
2009/04/29(水) 12:20:54例えばセルに、1,15,30,31と入ってとします。
それを各数字を分けて認識するにはどうしたらよいのでしょう?
stringに入れてそれを指定の区切り文字単位で
走査する方法があるのでしょうか?
0866デフォルトの名無しさん
2009/04/29(水) 12:22:180867デフォルトの名無しさん
2009/04/29(水) 12:24:21dim var as variant
var = split(cells(1,1),",")
0868デフォルトの名無しさん
2009/04/29(水) 12:54:25思うに、見たことのないマクロとは「excel4macro」のことではなかろうか。
2007ではマクロの記録に、このexcel4macroが所々出てくる。
ここの常連さん達は消える運命と教えられた人が多い。
通常のvbaに書き換えることはできるけれど、設定等で長くなるから、そのまま
使うのが、ベストと思う。
「excel 4macro」で検索してみて、その後、その部分だけアップして翻訳依頼してみたら
どうでしょうか?
0869デフォルトの名無しさん
2009/04/29(水) 12:59:21excel4macroで記述されないように設定することができるかについては
折れにはできなかったとしか答えられません。
おそらく、復活したので、これが優先されるようになっていると考えています。
0870デフォルトの名無しさん
2009/04/29(水) 15:06:19バージョン:Excel 2000
作成したデータをテキストに出力するVBAを組んでいますが、保存名のところでつまづいています。
ネットで調べると、保存ダイアログを表示させて保存する方法が載っていたのですが
A1のデータ + ".txt" という具合に保存名が決まっているので、ダイアログを表示せずに保存ができると思い
cnsFILENAME = A1 & ".txt"
上記のように指定しましたが、定数を入れなければならないのでエラーを吐いてしまいます。
うまいこと保存名をどこかのセルから取得する方法はないでしょうか?
0871デフォルトの名無しさん
2009/04/29(水) 15:32:42なにやってんの?
0872デフォルトの名無しさん
2009/04/29(水) 17:32:52今どきこんなのやらねーな
0873デフォルトの名無しさん
2009/04/29(水) 19:46:42ActiveWorkbook.SaveAs Filename:=consFILENAME,FileFormat:=xlCurrentPlatformText
FileFormatが無くても保存できそうなんだけど
0874デフォルトの名無しさん
2009/04/29(水) 19:55:10ActiveWorkbook.SaveAs Filename:=cnsFILENAME,FileFormat:=xlCurrentPlatformText
ちょっとだけ修正
0875デフォルトの名無しさん
2009/04/29(水) 20:15:490876864
2009/04/29(水) 20:32:18記録マクロは下のようコードだけど、これって化石マクロ?
メソッドじゃなくオブジェクトになっちゃってるみたいね。
' Macro1 Macro
'
'
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add Key:=Range("A2:A6"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet2").Sort
.SetRange Range("A1:B6")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
0877デフォルトの名無しさん
2009/04/29(水) 20:47:06定数ってことじゃない
0878デフォルトの名無しさん
2009/04/29(水) 21:48:10ありがとうございます。
試してみます。
0879デフォルトの名無しさん
2009/04/29(水) 22:19:11その予測は誰でも最初によぎるが、定数として使われてるのではなく
A1セルの内容によって変動する変数として使われてるから聞いているのでは?
0880デフォルトの名無しさん
2009/04/29(水) 22:55:30チェンジ ネーム スンゲー の略
0882デフォルトの名無しさん
2009/04/29(水) 23:54:120883デフォルトの名無しさん
2009/04/30(木) 00:12:250885デフォルトの名無しさん
2009/04/30(木) 11:54:45そんな屁理屈聞いてんじゃねえんだよ
0887デフォルトの名無しさん
2009/04/30(木) 12:15:50どうしたの?
0888デフォルトの名無しさん
2009/04/30(木) 12:38:57馬鹿にかまうな。
0889デフォルトの名無しさん
2009/04/30(木) 12:59:32On Error Resume Next
0890デフォルトの名無しさん
2009/04/30(木) 23:42:42Dim wSheet As Worksheetと宣言し、
最終的にはこのwSheetに
「
0891デフォルトの名無しさん
2009/04/30(木) 23:47:25Dim wSheet As Worksheetと宣言し、
最終的にはこのwSheetに
「Workbook("test01.xls").Worksheet("test02")」と入力しようとしてます。
ただ、「01」「02」の部分はstring型の変数に入っているので、
Set wSheet = "Workbook(" & """" & "test" & num1 & ".xls" & """" & ").Worksheet(" & """" & "test" & num2 & """" & ")"
と書いています。
これではエラーが出てしまい、何がいけないのか分かりません。
上記のように、途中変数等をはさんでシート名をWorksheet型の変数に入れるにはどうしたらよいのでしょう?
0892デフォルトの名無しさん
2009/05/01(金) 00:10:26Worksheetはオブジェクトなので文字列は代入出来ない。
コレクションのIndexには要素のNameを示す文字列を使用出来るので以下の表記が正解
Set wSheet = Workbooks("test" & num1 & ".xls" ).Worksheets("test" & num2)
0893デフォルトの名無しさん
2009/05/01(金) 08:49:15ありがとうございます!
意味も分かりやすく助かりました!
0894デフォルトの名無しさん
2009/05/01(金) 18:20:02a = 10
a = a ^ a
MsgBox a, Title:="10の二乗は?"
End Sub
1時間前から勉強し始めたのですが、
答えが100になりません。
どこが間違ってますか?
0895デフォルトの名無しさん
2009/05/01(金) 18:31:07Sub 四則演算()
a = 10
b = a ^ a
MsgBox b, Title:=a & "の" & a & "乗は?"
End Sub
0896デフォルトの名無しさん
2009/05/01(金) 18:34:58a = a ^ a
は10の10乗だろ
aの二乗なら
a = a ^ 2
VBA以前に中学校数学の問題
因みに冪乗は四則演算じゃないからね
加減乗除の4つが四則で、冪乗(10の3乗=1000 とか)、冪根(9の平方根=3 とか)は含まれない
0897デフォルトの名無しさん
2009/05/01(金) 18:42:37どうもありがとう。
0898デフォルトの名無しさん
2009/05/01(金) 18:46:20VBAを利用してEXCELのセルA1などに本日の株価を表示させたいと思っているのですが
ソースを取り込む方法がわからないでいい方法がないか探しているのですがなかなか見つかりません
http://stocks.finance.yahoo.co.jp/stocks/detail/?code=6501
からソースを取り込み
正規表現でマッチングしていけば 本日の現在値である345をえることができると思っているのですが
VBAのハイパーリンクの機能などを使ってソースを取り込むいい方法はないでしょうか?
OSがマックということもありVBAの基本的な機能は使用できるのですがIE周りの機能が使えないのですが可能でしょうか?
スレ違いかもしれませんがWindows2000+Office2000だとこうすればIE使わないで可能だよなど
アドバイスがありましたらよろしくお願いいたします
0899デフォルトの名無しさん
2009/05/01(金) 19:02:05Webクエリ
上記では出来ることがかなり限られてくるが
それ以上のことがしたい場合はスレ違いになるのでよろしく>>1★3
0900デフォルトの名無しさん
2009/05/01(金) 19:12:35こちらのページをエクセルで直接開いて、日付で検索するのはどうよ
0901デフォルトの名無しさん
2009/05/01(金) 21:04:21スクロールボタンを直接シートに貼ろうとしてもできません
エクセル2002で
表示-ツールバー-コントロールツールボックス-デザインモード
ここまではできたのですが選択後ドラッグできません
なんか設定があるのでしょうか
0902デフォルトの名無しさん
2009/05/01(金) 23:14:38他のボタンとかは貼り付いた?
0903デフォルトの名無しさん
2009/05/01(金) 23:58:25全部だめ
やり方はopenofficeでいけたのであってると思います
色変わるのかないけるとき
0904デフォルトの名無しさん
2009/05/02(土) 00:22:31寝言は寝て言え。
OpenOfficeでできたから、Microsoft Excelでもできるって
どんな脳内理論だよ。
0905902
2009/05/02(土) 00:28:08もれのExce97だとね
0906デフォルトの名無しさん
2009/05/02(土) 01:06:59できたってことだよ
0907デフォルトの名無しさん
2009/05/02(土) 07:57:10スレ違いなので詳しく説明しないけど,VBAじゃなくてAutomatorでできるよ。
0908デフォルトの名無しさん
2009/05/02(土) 20:29:15VBAを使って あるサイトにいって”自動ログイン”って可能ですか??
詳しい方おしえてください。おねがいします。
0909デフォルトの名無しさん
2009/05/02(土) 20:32:53スレ違いなので具体的な方法の説明は伏せますが>>1★3,4
0910デフォルトの名無しさん
2009/05/02(土) 20:36:55ありがとうございました。
0911デフォルトの名無しさん
2009/05/02(土) 21:16:59自分は昨日からVBA勉強し始めたのですが、腕試しに受験しようかなと思ってます。
良かったら受験記お願いします。
0912デフォルトの名無しさん
2009/05/02(土) 21:20:30他言語やってても、試験の内容のレベルまで到達するのに半年近くかかったよ・・・。
0913デフォルトの名無しさん
2009/05/02(土) 23:03:44VBA Standard(古い方)はそんなに難しくなかったよ。
基本情報でCをかじったレベルから30時間程度で取れたよ
0914デフォルトの名無しさん
2009/05/02(土) 23:07:590915デフォルトの名無しさん
2009/05/03(日) 04:50:06今、読了。
自分は飽きっぽいので、興味が冷めないうち、
GWの間に更に完成度を高めたい。
0916デフォルトの名無しさん
2009/05/04(月) 12:28:40がんばれ
0917デフォルトの名無しさん
2009/05/04(月) 12:45:51なんかExcelとAccessだけみたいだけど
資格はどうでもいいんだけど、教える時の体系だったあんちょこを探してたのでこれは役立つ、のかな?
0918デフォルトの名無しさん
2009/05/04(月) 17:31:04元々あったエクセルのファイルを使いやすいものにしようと思い
標準モジュールを挿入して
sub A、sub B、function Cの3個の関数を作成し
A、B両方からCを呼び返り値をそれぞれのセルに代入すると言うVBAを作成しました。
ただオリジナルをいきなりいじるのは怖かったのでバックアップを弄るようにしました。
問題なくバックアップの方でマクロの実行ができましたので
オリジナルの方に移植しようと
標準モジュールを挿入してコードをコピをしてマクロの事項をしてみたところ
function Cで
「コンパイルエラー:ユーザー定義型は定義されていません」とエラーが出るようになってしまいました。
これを解決するいい方法はないでしょうか?
0919デフォルトの名無しさん
2009/05/04(月) 17:49:060920デフォルトの名無しさん
2009/05/04(月) 17:54:48本当だ、、、、、
参照ってエクセル自体じゃなくてファイル毎に設定されてるんですね
勉強になりました
2時間ぐらいなんでだろと悩んでたもやもやが消えました!
0921デフォルトの名無しさん
2009/05/04(月) 18:48:340922デフォルトの名無しさん
2009/05/06(水) 00:24:35Dim strSpeech As String
Application.Speech.speak "Hello !"
strSpeach = "Excel VBA World !"
Application.Speech.speak strSpeach
End Sub
で、” ” に、ひらがなを入れると喋ってくれないのですが、方法はありませんか?
0923デフォルトの名無しさん
2009/05/06(水) 01:30:410924デフォルトの名無しさん
2009/05/06(水) 05:16:28音声合成の音声の選択を
けんじかなおこにしないと駄目
みたいよ
0925デフォルトの名無しさん
2009/05/06(水) 21:11:57ver:Office 2000
新しいパスワードをつけるマクロを実行すると「実行時エラー438
オブジェクトは、このプロパティまたはメソッドをサポートしていません」となります。
ソースはここです↓
ActiveWorkbook.Password = "TEST"
ほかの端末(office2003)では実行できるのに何故でしょうか
0926デフォルトの名無しさん
2009/05/06(水) 22:03:590927デフォルトの名無しさん
2009/05/07(木) 00:08:19ありがとうございます。
解決しました。
ActiveWorkbook.SaveAs Filename:=myFilename, Password:="TEST"
にしました。
0928デフォルトの名無しさん
2009/05/07(木) 03:41:17'数値を四捨五入して指定した有効桁数にします。
'書式 ROUND2(数値, 有効数字の桁数)
'数値 四捨五入の対象となる数値を指定します。
'有効数字の桁数 数値を四捨五入した結果の有効数字の桁数を指定します。
Function ROUND2(aa, nn) '数値を任意の有効桁数に四捨五入する
ActiveSheet.ActiveCell.NumberFormatLocal = "0.000"
ROUND2 = Application.Round(aa, -Int(Application.Log(Abs(aa))) - 1 + nn)
End Function
有効数字に四捨五入する前に、セルの書式を変えたいのですが、
計算させてみると#VALUE!となります。
どういう風に書けばよいのでしょうか?
0929デフォルトの名無しさん
2009/05/07(木) 06:08:22念のために聞くけど、例えば3.14の有効桁数はいくつだと考えている?
0930デフォルトの名無しさん
2009/05/07(木) 07:08:060931デフォルトの名無しさん
2009/05/07(木) 08:40:39小数点以下2桁なので2
0932デフォルトの名無しさん
2009/05/07(木) 08:56:47ワークシート関数Round()との違いは何?
0933デフォルトの名無しさん
2009/05/07(木) 09:51:403桁です。
>>932
ワークシート関数ROUND()は
=ROUND(0.105,2) → 0.11
=ROUND(0.0955,2) → 0.1
=ROUND(9.55,2) → 9.95
となるのに対して、
=ROUND2(0.105,2) → 0.11
=ROUND2(0.0955,2) → 0.096
=ROUND2(9.55,2) → 9.6
と有効桁数を揃えることができます。
ただ、
=ROUND2(9.55,4) → 9.550
のはずが、末尾の0が表示されないので9.55になります。
セルの書式を弄れば良いのではと思い、試しに小数以下第3位まで表示するため、
ActiveSheet.ActiveCell.NumberFormatLocal = "0.000"
としました。
0934デフォルトの名無しさん
2009/05/07(木) 13:40:47ユーザー定義関数からセルの書式を変えることはできない。
どうしても表示桁数を変えたいなら文字列にするしかない。
0935デフォルトの名無しさん
2009/05/07(木) 14:24:57そういうこと。
0936デフォルトの名無しさん
2009/05/07(木) 17:57:21Application.ActiveCell.NumberFormatLocal = "0.000"
または、ActiveCell.NumberFormatLocal = "0.000"
0937デフォルトの名無しさん
2009/05/07(木) 19:19:32指数表示にすれば解決。
ていうかそれ以外の解決方法はない。
0938デフォルトの名無しさん
2009/05/07(木) 20:56:56教えてください。
ActiveSheet.Range("a3:c7").Rows(5).Interior.ColorIndex = 3
5行目だけじゃなくて、5行目から10行目まで,塗りつぶすにはどう書いたら良いですか?
0939デフォルトの名無しさん
2009/05/07(木) 21:18:21Resize
0940デフォルトの名無しさん
2009/05/07(木) 21:23:33で良いのでは?
0941デフォルトの名無しさん
2009/05/07(木) 21:50:18ありがとうございます。
小出しにして申し訳ないのですが、
A列からC列の5行目から10行目だけを塗るつぶすには、どう書けばいいですか?
0942デフォルトの名無しさん
2009/05/07(木) 21:56:48すいません,できました。
↑でいいんですよね?
0943デフォルトの名無しさん
2009/05/07(木) 22:05:08ActiveSheet.Range("a5:c9").Interior.ColorIndex = 3 でいい気がする。
0944デフォルトの名無しさん
2009/05/08(金) 00:16:05i = 1
Do While i < endYline 'endYlineは最終行
Worksheets("Sheet1").Range(Cells(i, 1), Cells(i, 10)).Copy _
Destination:=Worlsheets("Sheet2").Cells(i, 1)
i = i + 1
Loop
上記のようにSheet1からSheet2へ1行ずつ10列分のコピーをしているのですが、
「表示しない」で表示を隠している行までコピーされてしまいます。
表示していない行はコピーしないようにするにはどうしたらよいでしょうか。
よろしくおねがいします。
0945デフォルトの名無しさん
2009/05/08(金) 00:23:32Range( ).EntireRow.Hiddenプロパティで行ごとに表示されているかどうかチェックできるので、
1行ずつ非表示かどうか調べながらコピーする。
0947デフォルトの名無しさん
2009/05/08(金) 01:01:42すいません,横レスですが、そういうことが分かるようになるまで、どれくらい勉強しましたか?
0948デフォルトの名無しさん
2009/05/08(金) 01:13:38解決方法を考えて
Hiddenプロパティを見つけて解決し覚える。
若しくは解決するためにネットで調べて方法が書いてあり覚える
とにかく一定期間勉強すると分かるというよりも、問題があるときに調べて覚えるので
調べ方を覚えれば「そういうことが分かる」ようになったと言えるのではないでしょうか。
0949デフォルトの名無しさん
2009/05/08(金) 01:18:47どうもありがとう。
自分は4月から勉強し始めました。
文を読めば、どういう処理をするのか想像できるようになったのですが、
”こういう処理をする文を書け”という問題になると、
どうしたら良いのかがわからない時が多いもので、
勉強の仕方が間違っているのかと思って、お尋ねしてみました。
どうもありがとう。
0950デフォルトの名無しさん
2009/05/08(金) 01:19:10VBAを使うようになって2年ぐらい。
とくに勉強したわけじゃなく
わからない→ぐぐる、の繰り返しで
基本はサンプルのコピペだから
ちっょと難しいプログラムはお手上げ。
0951933
2009/05/08(金) 01:23:49ユーザー定義関数からセルの書式を変えることはできないんですね。
次は、文字列でやってみようと思います。
みなさん、本当にありがとうございました。
0952デフォルトの名無しさん
2009/05/08(金) 07:12:20すぐに役立つかどうかはわからないけどお薦めするよ。
0953デフォルトの名無しさん
2009/05/09(土) 00:29:57と自分に問えば、答えはNOに決まっている。
それなのに、なぜプログラム言語を学べばどこかに採用されるはずだと思っているのだろう?
それなりに何年かその職種で頑張ってきた人たちでさえ、求職に苦労しているのに、
未だ何のキャリアもなく、定職に就いた事も無い自分が採用される可能性など万に一つもないはずなのに。。
こんな事はすぐわかる事なのに、俺みたいに外部とのつきあいが無いと、
助言してくれる人がいないから、なかなか気づけずにただ無駄に時間だけを無駄遣いしてしまう。
やっぱり、俺には肉体労働か単純労働しかないのか?
0954デフォルトの名無しさん
2009/05/09(土) 01:49:49Application.GetOpenFilenameでExcelファイルを開き、
開いたExcelファイルのどのワークシートに対してマクロ機能を使うかという処理なのですが、
シート名を選択するような方法はないでしょうか?
メッセージボックスで「マクロ機能を使いたいシートをアクティブにして下さい。」のように表示し、
手動でアクティブにした後、コマンドボタンを押したら・・・というのは考えられるのですが。
Excelファイル開く→シート名が一覧で表示される→任意のシート名を選択する
のように一連の動作としたいです。
よろしくお願いします。
0955デフォルトの名無しさん
2009/05/09(土) 02:54:07Inputbox に文字でシート名と番号を表示して、番号を入力させるちょっと見た目ショボイ方法でもいいかも。
※左下のタブ表示移動の三角を右クリックするとシートが多いときに出てくるダイアログは Application.Dialogs では出せなかった。
0956デフォルトの名無しさん
2009/05/09(土) 02:54:10debug.print sht.name
next
でシート名を引けるからリストボックスなりにアイテム追加すればいい
0957デフォルトの名無しさん
2009/05/09(土) 03:10:06>>956
レスありがとうございます。
やはりユーザーフォームを使うしかないのですね。
GetOpenFilenameのようにシート選択も標準メソッドとしてあったらよかったのですが・・・
シート名を取得してユーザーフォームに表示する方法で進めてみます。
アドバイスありがとうございました。
0958デフォルトの名無しさん
2009/05/09(土) 05:26:23>未だ何のキャリアもなく、定職に就いた事も無い自分
確かにそうだろうが、好きなら趣味でやれば良い。
好きでもないのに、義務感?でやってるなら、他の事をすれば良い。
0959デフォルトの名無しさん
2009/05/09(土) 07:55:30野球選手やサッカー選手って、0歳から教育してたとしても、
なれるのは更にそのごく一部だよな。
ピアニストやバイオリニスト考えても、子供の内から学んでも、
音大行ける奴はごく少数。更にプロになれるのは更にそのごく一部。
まず、比較対象を間違えてる。
事務系の仕事でサッカー上手かったり、ピアノ弾けたとしても、ちょっとモテル程度。
でも、事務系の仕事でVBAが少しだけでも分かれば、それは仕事面でのプラス。
断言しておくよ。職場にExcelがある仕事で、VBAを覚えておいて損な事は無い。
もしプログラムが苦手で、自分で組むのが得意じゃないとしても問題ない。
プログラマーに依頼するにも知識は必要だからね。
その言語が出来る事、向いてる事、出来ない事。
これを知るだけでも仕事上では役に立つ。
作るのは出来る奴にやらせりゃいいんだよ。
0960デフォルトの名無しさん
2009/05/09(土) 10:37:36経験が無い方が、逆に変な癖とか無いし企業側としては教えやすいっていう場合もありますよ。
生半可な知識持ってるとタチが悪いのも結構あります。
就職活動は行動する前に自己完結せずに行動を起して判断は相手に任せればいいのです。
0961デフォルトの名無しさん
2009/05/09(土) 12:38:08毎日10時間を10年続ければその道のプロになれます
よく阿呆な大人は脳波年を取ると動かなくなると言いますが
あれは嘘です
脳は年齢に関係なくしっかり動きます
ただ自分には無理だと思う人には無理です
0962デフォルトの名無しさん
2009/05/09(土) 12:52:040963デフォルトの名無しさん
2009/05/09(土) 13:38:5110年後にVBAが使われてるかどうか…
使われてるだろうなあ。
昔あった2000年問題も「このボロコンピュータがそんな先まで使われてないだろう」って
思い込んでしまったのが原因だし。
0964デフォルトの名無しさん
2009/05/09(土) 13:48:17Excel97 がでてからもう10年以上たってるし、
この先も使われるだろうね…
0965デフォルトの名無しさん
2009/05/09(土) 14:01:39昨日、夜中にスレ違いな書き込みしてすみませんでした。
レスしてくれた方々、ありがとうございました。
久しぶりに庭で蛇を見たw
0966デフォルトの名無しさん
2009/05/09(土) 14:50:28標準モジュールでフォームのPrivate Subプロシージャの真偽を判定したい場合は、
標準モジュールでpublic変数を宣言し、Private Subプロシージャ内でpublic変数に真偽を設定し、
それを標準モジュールで判定するという方法しかないでしょうか?
よろしくお願いします。
0967デフォルトの名無しさん
2009/05/09(土) 14:50:32安定剤飲んで寝とけ。
0968デフォルトの名無しさん
2009/05/09(土) 16:07:46処理の結果を一つだけ別のプロシージャに返したい場合はSubじゃなくてFunctionの方を使うのが普通。
結果が複数ある場合は参照渡しをする。
変数でPublicを使うのはできるだけ避けた方がいい。
そういう話じゃなくて?
0969デフォルトの名無しさん
2009/05/09(土) 16:25:57解りづらい説明で申し訳ありません。
問題としていることは、
・標準モジュールよりUserForm.Showでフォーム画面を開く
・コマンドボタンのクリックイベント「はい」または「いいえ」を押すと、Unload Meをしフォーム画面を閉じる。
・標準モジュールに戻ってきたが、「はい」か「いいえ」のどちらでフォーム画面を閉じたのか解らない
という感じです。
標準モジュール内で値渡しや参照渡し、Functionプロシージャによる戻り値は一通り理解したのですが、
標準モジュールからフォームへ上記を行うにはどうしたらよいのかと・・・
よろしくお願いします。
0970デフォルトの名無しさん
2009/05/09(土) 18:38:43str = msgbox(msg, vbYesNo)
if str = vbYes then
else
end if
ところで、コマンドボタンをクリックした時に、何かアクションさせないのかなあ?
0971デフォルトの名無しさん
2009/05/09(土) 18:44:01どっかのセルに書き込めばOK
0972デフォルトの名無しさん
2009/05/09(土) 18:50:00if UserForm1.ActiveControl.Name = "ComamandButton1" then
elseif UserForm1.ActiveControl.Name = "ComamandButton2" then
end if
0973デフォルトの名無しさん
2009/05/09(土) 20:07:14上の「はい」「いいえ」はあくまで例でして、実際にやりたいことは
Sub マクロ()
Call ファイル選択関数()
Call シート選択関数()
Call シート内検索関数()
End Sub
のように処理内容ごとに関数をわけてます。
2番目のシート選択関数で、シート名をフォームの
コンボボックス及びコマンドボックスを使って抽出しているのですが、
抽出したシート名を3番目の関数でも使いたいのです。
Public変数を宣言しておいて、
2番目の関数のフォーム内でPublic変数にシート名を代入
3番目の関数でPublic変数名のシートを検索
という感じではとりあえず動きは問題なさそうですが、
Publicはあまり使わないほうがいいのかなと・・・
0974デフォルトの名無しさん
2009/05/09(土) 20:32:04>変数でPublicを使うのはできるだけ避けた方がいい。
って書いてるやん
まぁ出来るだけって事であって絶対使うなって事ではないし、あんたが作り易い方法で作れば
良いでしょ?
0975デフォルトの名無しさん
2009/05/09(土) 21:03:43そうですね、すみません。
皆さんありがとうございました。
0976デフォルトの名無しさん
2009/05/09(土) 22:25:32A1~Q1を右寄せに
A3~Q3を右寄せに
、、、、、、
A49~Q49を右寄せに
としたいと思っているのですが
現状Range(Cells(1 + i*2, 1), Cells(1 + i*2, 19)).HorizontalAlignment = xlRight
をforでくくって複数回実行しているのですが
マウスで操作するように
A1~Q1、A3~Q3、、、、A49~Q49をまず選択して
HorizontalAlignment = xlRightを1回実行すれば49まで一気に右寄せにできるいい方法はないでしょうか?
0977デフォルトの名無しさん
2009/05/09(土) 22:31:57ループではRangeに渡す文字列を作るだけにして、ループを抜けてから
Rstr = "A1:Q1,A3:Q3,A5:Q5, … ,A49:Q49"
Range(Rstr).HorizontalAlignment = xlRight
0978デフォルトの名無しさん
2009/05/09(土) 22:55:51サンクス
そうか文字列足せばいいんだ
無事1回の実行でやりたいことができました
今までは実行したら右寄せが終わるまで砂時計が出ててカクカクしてたのがなくなりました
0979デフォルトの名無しさん
2009/05/09(土) 22:58:06それだと全部文字列書かないといけないジャン!
>>976
マクロ登録で複数選択して右寄せってやってみそ!
0980デフォルトの名無しさん
2009/05/09(土) 23:21:34どうしても一発出来ないような処理の場合
ScreenUpdatingでカクカクは見えなくできるよ
0981デフォルトの名無しさん
2009/05/09(土) 23:29:00range("A1:Z1")に範囲を拡張したいと思ってるのですが
始点は変更せずに終点だけを変更するものって用意されているのでしょうか
>>979
マクロも便利ですね
こっちの方もちょっと勉強してみようと思います
0982デフォルトの名無しさん
2009/05/09(土) 23:41:55Set extRange = Union(Range("A1:Q1"), Range("R1:Z1"))
0983デフォルトの名無しさん
2009/05/09(土) 23:46:46A1を起点として変動する最終列のセルを求めるなら
LastC = Cells(1, 256).End(xlToLeft).Column
0984デフォルトの名無しさん
2009/05/09(土) 23:49:37×最終列のセルを求めるなら
○最終列番を求めるなら
0985デフォルトの名無しさん
2009/05/10(日) 00:08:08「拡張」の意味がよくわからんが。
始点が変わらないなら Range("A1:Q1").Range("A1:Z1") みたいに書けば
最初のRangeの範囲の左上をA1とみなした相対的なサイズを指定したことになる。
0986デフォルトの名無しさん
2009/05/10(日) 00:30:30単に奇数行を右寄せしたいだけなら
Sub Test2()
Dim bRow As Byte
Dim bCol As Byte
Dim bLastRow As Byte
Dim bLastCol As Byte
With ActiveCell.CurrentRegion
bLastRow = .Rows.Count
bLastCol = .Columns.Count
For bRow = 1 To bLastRow
If bRow Mod 2 <> 0 Then
For bCol = 1 To bLastCol
.Cells(bRow, bCol).HorizontalAlignment = xlRight
Next bCol
End If
Next bRow
End With
End Sub
じゃだめ?
0987デフォルトの名無しさん
2009/05/10(日) 00:31:18長すぎ。それから質問をよく読め
0988デフォルトの名無しさん
2009/05/10(日) 00:32:17見づら過ぎてすまん
0989デフォルトの名無しさん
2009/05/10(日) 00:35:04Dim Rstr As String
Rstr = "A1:Q1"
For i = 3 To 49 Step 2
Rstr = Rstr + ",A" & i & ":Q" & i
Next
Range(Rstr).HorizontalAlignment = xlRight
0990デフォルトの名無しさん
2009/05/10(日) 00:47:12Rangeで扱える文字数をオーバーしたらどうすんだよ。
試しに49を70にしてみなよ。
0991デフォルトの名無しさん
2009/05/10(日) 00:54:350992デフォルトの名無しさん
2009/05/10(日) 00:57:03何の役にも立たんどころか質問スレにとっては単なる荒らしと変わらん
0993デフォルトの名無しさん
2009/05/10(日) 01:25:000994デフォルトの名無しさん
2009/05/10(日) 02:00:00普通にループすりゃいいだけだろうがよ。
いっぺんにやろうとするのに無理があるんだよ。
0995デフォルトの名無しさん
2009/05/10(日) 02:02:09おまえこそ役にたたねーよ。
>>998がダメなのが分らないならVBAなんてやめるんだな。
0996デフォルトの名無しさん
2009/05/10(日) 02:07:24でも内部コードは同じだからxlRightでも同じ結果になるんだよなあ
なんでコンパイル通っちゃうんだろう
0997デフォルトの名無しさん
2009/05/10(日) 02:08:51ベンチマーク狂の人に素晴らしい回答をお願いしたいところ
0998デフォルトの名無しさん
2009/05/10(日) 02:11:10速いとか遅いとかじゃねーっだよヴォケ。
確実に動くことが大事なのが分らんの?
ヴァカにはわからんだろうね。
0999デフォルトの名無しさん
2009/05/10(日) 02:16:43質問者の言うことをなんでも聞けばいいと思ってるんだろう。
ループの方が確実と教えるだけの能力がないんだよ。
1000デフォルトの名無しさん
2009/05/10(日) 02:17:41http://pc12.2ch.net/test/read.cgi/tech/1241885130/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。