Excel VBA 質問スレ Part26
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2012/08/19(日) 17:01:50.51ExcelのVBAに関する質問スレです
★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
VBAとは、『Visual Basic for Applications』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
前スレ:
Excel VBA 質問スレ Part25
http://toro.2ch.net/test/read.cgi/tech/1341722983/
0002デフォルトの名無しさん
2012/08/19(日) 17:03:06.09関連スレ:
VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/
0003デフォルトの名無しさん
2012/08/20(月) 00:06:38.58しかしWin8でもVB6サポートされるとか
やっぱ当分VB系は安泰だなぁ
0004デフォルトの名無しさん
2012/08/20(月) 10:28:43.34そして閉じたぱぱのBook内のデータをオートフィルタすることもできたりしますか?
0005デフォルトの名無しさん
2012/08/20(月) 10:40:26.94というのはさて置き、閉じたままと言っても、当然本当に閉じたままでは
何も出来るわけが無いので、「閉じたまま=GUI上で開かず」と解釈すると
ExcelのCOMインスタンスを作ってやってそれで開けばいいだけ
後の操作は普通に開いてるブックやシートと全く同じ
GUI上には表示せずに、裏で開いた状態でなんでも出来る
0006デフォルトの名無しさん
2012/08/20(月) 11:10:48.19どうしてググろうと思わないわけ?
0007デフォルトの名無しさん
2012/08/20(月) 11:54:07.42雷でよく見る実にわかりにくい図のことで質問です。
濃いピンクが安全だということらしいけど
それより内側は危険であり、さらにそれより外側も危険という認識で合ってますか?
0008デフォルトの名無しさん
2012/08/20(月) 12:12:49.200009デフォルトの名無しさん
2012/08/20(月) 16:55:32.92Outlookのテンプレートの機能をプログラミングをしたいのですが
その方法を教えてくださぃ。
Outlookのテンプレート機能を使わないのは
メールの本文中にその当日の「日付」を使ったり
Excelのセルに用意したデータをメールの本文に使いたいからです。
0010デフォルトの名無しさん
2012/08/20(月) 17:16:34.420011桃白白
2012/08/20(月) 17:30:59.98>>7
合ってると思うよ
0012デフォルトの名無しさん
2012/08/20(月) 17:45:38.20マクロ実行後も値はそのままですか?
次回にマクロ実行したときは値はそのぱぱ残ってる値に加算されますか?
0013デフォルトの名無しさん
2012/08/20(月) 17:59:32.15その変数がクリアされなければ残ってる。
いつクリアされるのかは、明らかではない。
クリアされて困るなら、シートに保存すべし。
詳しくは、こことか参照。
http://www.moug.net/tech/exvba/0150116.html
0014デフォルトの名無しさん
2012/08/20(月) 18:08:05.83COMインスタンスとはなんでしょぅか?
>>13
びっくりですね。
これからはモジュル先頭で変数は宣言しないことにしました。
0015デフォルトの名無しさん
2012/08/20(月) 18:26:39.82> これからはモジュル先頭で変数は宣言しないことにしました。
関数の実行開始から終了までの同一性は保証されてるから、その範囲で使うなら問題ない。
「関数の実行開始から終了まで」というのは、
dim g as long
sub foo()
g = 1
bar
debug.print g
end sub
sub bar()
g = g + 1
end sub
のとき、foo()の開始から終了までという意味。
なお、クラスを使ってgをプロパティかprivate変数にすれば、知らない間にクリアされるということはなくなる。
0016デフォルトの名無しさん
2012/08/20(月) 23:54:52.30よく解らなかったらとりあえずシートに残して使う時だけ拾うようにしとけば良いんでねーの
解ったら自分で直せる訳だし
COMはググれとしか。多分意識しないでも使ってるんだろうけど。
0017デフォルトの名無しさん
2012/08/21(火) 05:38:35.680018デフォルトの名無しさん
2012/08/21(火) 09:28:19.50別のブックを開いてアクティブにするにはどうしたらいい?
0019デフォルトの名無しさん
2012/08/21(火) 09:58:35.990020デフォルトの名無しさん
2012/08/21(火) 11:16:09.57元のブックのユーザフォーム.を開くには
元のブック.ユーザフォーム.Showでできないのはどうして?
>>18
単に「別ブック.Activate」でいいじゃん。
0021デフォルトの名無しさん
2012/08/21(火) 17:04:40.11マクロから開くのではなくて、
普通にフォルダからダブルクリックで開いたときに
アクティブになるようにしたいのです。
0022デフォルトの名無しさん
2012/08/21(火) 17:10:40.46したいのならしろよ。
0023デフォルトの名無しさん
2012/08/21(火) 17:31:25.650024デフォルトの名無しさん
2012/08/21(火) 17:40:51.790025デフォルトの名無しさん
2012/08/21(火) 18:13:39.86マクロ使わないなら、スレ違いだからどっか行って。
0026デフォルトの名無しさん
2012/08/21(火) 18:26:13.56スレ違いですか?
元々開いてるユーザーフォームのあるブックの
マクロで設定できないかと思ったんですが
0027デフォルトの名無しさん
2012/08/21(火) 18:29:55.86private sub workbook_open()
userform1.show
end sub
0028デフォルトの名無しさん
2012/08/22(水) 12:32:49.07Worksheets("" & sh & "").Activate
ActiveSheet.ChartObjects.Add(0, 500, 960, 300). _
Chart.SetSourceData Sheets("" & sh & "").Range("C" & sh & ":C" & num + 5 & "")
ActiveSheet.ChartObjects(1).Chart.ChartType = xlLineMarkers
Cells(1, num).Select
Next sh
埋め込みグラフが選択されているのをはずしたいだけなのですが
Cells(1, num).Selectのところで「アプリケーション定義またはオブジェクト定義のエラーです。」
と出ます。解決策をご教授ください。
0029デフォルトの名無しさん
2012/08/22(水) 12:49:13.39ActiveSheet.Cells(1, num).Select
にしてみたら?
あと、Withとか使うと楽かもよ
0030桃白白
2012/08/22(水) 23:06:16.79numが定義されてないんじゃね
0031デフォルトの名無しさん
2012/08/22(水) 23:22:08.890032桃白白
2012/08/22(水) 23:40:17.20やめて!桃白白にむやみにリンクを張らないで!
定義のエラーっていってたから定義されてないんじゃねって桃白白考えたの
Cellsはオブジェクトが指定されなかったらアクティブワークブックのアクティブシート
を返しちゃうだろ WorksheetsほげほげActivateでアクティブシートが選択されてんだから
ActiveSheetってつけなくてもいんじゃね
0033桃白白
2012/08/23(木) 00:27:36.41∧ ∧
|≡V≡|
|O(\)O|
(V)(゚Д゚)(V)
ヽ三i三ソ
(/ \)
∪"∪
0034桃白白
2012/08/23(木) 00:28:10.42(V)∧_∧(V)
ヽ(・ω・)ノ
/ /
ノ ̄ゝ
フォッフォッフォッフォッフォッ
(V)∧_∧(V)
ヽ( )ノ
/ /
.....ノ ̄ゝ
0035デフォルトの名無しさん
2012/08/24(金) 06:50:22.30仕事で使ってるのでAM9からPM6までずっとExcelは立ち上げたままです。
マクロが原因なのは間違いないと思います。
軽くするにはどうしたらいいでしょうか?
0036デフォルトの名無しさん
2012/08/24(金) 07:28:47.43マクロが原因だということまで特定できてるなら
そのマクロのバグを修正しろよ・・・
003735
2012/08/24(金) 07:59:23.13そんなこといわずに
あなたが上級者なら
よく初心者が犯しがちな
メモリーを消費したままになる良くないコードを予想し
それに対しての対策を指示してあげたらどうです?
0038桃白白
2012/08/24(金) 08:03:24.58エスパーしたらいいじゃない! 教えてくれたらいいじゃない! ってか
じゃあ桃白白が教えてあげちゃう
グローバル変数使うのやめな これで100%解決する
桃白白に感謝しちゃったらいいじゃない
003935
2012/08/24(金) 08:21:39.84グローバル変数なんて野蛮なものは使ってないからだ
0040桃白白
2012/08/24(金) 08:29:22.43いいやお前はグローバル変数を使っている
使っていないと思い込んでいるだけだ
桃白白は上級者だがお前は初心者だ
初心者は上級者の言うことを素直に聞くべきだ
お前はグローバル変数を使っている お前はグローバル変数を使っている 目を閉じて反芻しろ
004135
2012/08/24(金) 08:33:19.36のび太のくせに生意気だ
0042デフォルトの名無しさん
2012/08/24(金) 11:37:23.01環境はWindows7、Excel2007です。
ユーザーフォーム上のテキストボックスに
セルをリンクさせたいのですが、テキストボックスのプロパティの
Text欄、Value欄に「=Sheet1!A1」と入れても「」内の文字列が
そのまま表示されてしまいます。
Excelのシート上のテキストボックスで同じ操作をすると
そちらはきちんとセルがリンクされるのですが…。
0043デフォルトの名無しさん
2012/08/24(金) 11:49:49.47ユーザーフォームのテキストボックスなら
「=Sheet1!A1」を入れるのはControlSource
0044へっぽこエスパー
2012/08/24(金) 12:34:01.86エラーメッセージとか出ないの?
Excel2007だとこんなバグもあるみたいだけど
http://support.microsoft.com/kb/971594/ja
0045デフォルトの名無しさん
2012/08/24(金) 12:34:21.37おおおおお!出来た!
これでとりあえず形だけは完成しました。
ありがとうございます
0046デフォルトの名無しさん
2012/08/24(金) 13:36:54.76実際に動かしてみたら問題が発生してしまいました。
下記の状況です。
ユーザーフォーム上でコマンドボタンnAとコマンドボタンnBを重ねて表示
コマンドボタン1Aを押すとSheet1!B1に1が入力されコマンドボタン1Aが背面に移動
コマンドボタン1Bを押すとSheet1!B1に0が入力されコマンドボタン1Bが背面に移動
コマンドボタン2Aを押すとSheet1!B2に1が入力されコマンドボタン2Aが背面に移動
コマンドボタン2Bを押すとSheet1!B2に0が入力されコマンドボタン2Bが背面に移動
以下コマンドボタン3〜と続く。
Sheet1のA列にはあらかじめ決まった数字が入力されていて、Sheet1のC列はA列とB列の積です。
Sheet2のA1はSheet1のC列の合計、SUM(Sheet1!C:C)です。
たとえばSheet1!A1に30、Sheet1!A2に40が入力されていたとして、
ボタン1Aを押すとSheet1!C1が30*1で30となり、まずSheet2!A1が30になり、
次いでボタン2Aを押すとSheet1!C2が40*1で40、Sheet2!A1が30+40で70になります。
このSheet2!A1を先ほどのテキストボックスのControlSouceに入力したのですが
コマンドボタン1Aを押すとSheet2!A1にSheet1!A1 * Sheet1!B1の数値、上記の例だと30*1の30という数値が
入力されてしまい、SUM(Sheet1!C:C)という数式は消え、他のコマンドボタンを押しても反応がなくなってしまいます。
どうすればよいのでしょうか。。
0047へっぽこエスパー
2012/08/24(金) 15:54:05.98各コマンドボタンのクリックイベントに
Sheet2.Cells(1,1) = "= SUM(Sheet1!C:C)"
って入れといたらどうですか?
あと、On/Offの2値を扱いたいなら
コマンドボタンよりトグルボタンのほうが良くないですか?
0048デフォルトの名無しさん
2012/08/24(金) 22:39:47.47まずControlSource使うのやめて、
各ボタンのクリックイベントに、TextBox1.Text = Sheet2.Range("A1").Valueとか書くのが正解だろ
(つかそう書いたサブルーチン呼べ)
というかまずボタンを重ねて配置するとか馬鹿なことをやめろよ
0049デフォルトの名無しさん
2012/08/25(土) 11:19:20.04ActiveSheet.ChartObjects(1).Chart.Axes(xlValue).MajorGridlines.Select
どこを直せばいいですか。
0050デフォルトの名無しさん
2012/08/25(土) 11:59:34.26どこを直せばいいのですか。
Activesheet.Shapes.Delete
0051桃白白
2012/08/25(土) 12:04:08.98なんというエラーが出る?桃白白にもわかりそうなエラー?
わかりそうなやつだったら答えちゃうけど
0052桃白白
2012/08/25(土) 12:12:42.00For Eachでぐーるぐる
Dim s As Shape
For Each s In ActiveSheet.Shapes
If (s.Type = MsoShapeType.msoFormControl) Then
If (s.FormControlType = XlFormControl.xlCheckBox) Then
s.Delete
End If
End If
Next
0053デフォルトの名無しさん
2012/08/25(土) 13:12:04.08>>48
役割はトグル以外の何物でもないのですが、
クリックすると白黒画像からカラーに変わるギミックを
どうしてもやりたくて、方法がわからずこのような原始的な方法を取りました。
各ボタンに記述してみます。ありがとうございました
0054デフォルトの名無しさん
2012/08/25(土) 13:26:17.55選択しようとするからじゃないの?
ActiveSheet.ChartObjects(1).Activate
0055デフォルトの名無しさん
2012/08/25(土) 14:32:05.25ActiveSheet.ChartObjects(1).Activate
ActiveSheet.ChartObjects(1).Chart.Axes(xlValue).MajorGridlines.Select
できましたwありがとうございます
0056桃白白
2012/08/25(土) 14:40:56.33そんなの桃白白認めない
0057デフォルトの名無しさん
2012/08/25(土) 17:22:08.78ExcelVBAでは、文字型の数値が、代入先の型に自動的に変換されるものと漠然と思っていました。
以下のようにサンプルを作ってテストしてみましたが一貫しない結果がでました。
Test1は、文字列が数値化されて数値の合計が表示されました。
しかし、Test2では、文字列の連結として表示しました。
さらに、宣言文の(**)の部分を、Dim Int3, Int4, n As Long からDim Int3, Int4 As Long としてnを除くと、正常に数値として加算されました。
このように変わるのはどうしてでしょうか?
原因がわからないと安心してマクロを組めないのでよろしくご教示ください。
(WindowsXP Excel2007です)
Sub 型変換テスト()
Dim Int1, Int2 As Long '(*)
Dim Int3, Int4, n As Long '(**)
Dim Sum1, Sum2 As Long
' ******* Test 1 ************
Int1 = "1827"
Int2 = "1931"
Sum1 = Int1 + Int2
MsgBox ("Test 1 = " & Sum1)
' ******* Test 2 ************
Int3 = "1827"
Int4 = "1931"
Sum2 = Int3 + Int4
MsgBox ("Test 2 = " & Sum2) '文字列の連結
End Sub
0058デフォルトの名無しさん
2012/08/25(土) 17:32:32.39ちゃんと宣言されてないよ
0059デフォルトの名無しさん
2012/08/25(土) 17:33:16.19初心者がよくハマるやつだな
Dim Int1, Int2 As Long
Int1は型指定無し、Int2はLong型
Dim Int3, Int4, n As Long
Int3, Int4は型指定無し、nはLong型
Dim Int3 As Long, Int4 As Long, n As Long
Int3, Int4, n全部Long型
型はひとつひとつ指定しないとダメ
Dim Int3, Int4, n As Long
だと最後のnしか型指定してないことになる
型指定無し(Valiant型)だと、代入した値依存の内部型になるから
Intのつもりで実はstr3 + str4をやっていたというわけだ
0060デフォルトの名無しさん
2012/08/25(土) 18:25:24.46なんで宣言出来ないんだ??
0061デフォルトの名無しさん
2012/08/25(土) 18:49:27.72仕様に対して「なんで」って言い出したらキリがない
0062デフォルトの名無しさん
2012/08/25(土) 18:50:38.91ってヘルプに書いてあるから、そういう仕様だとしか
0063デフォルトの名無しさん
2012/08/25(土) 19:10:26.70何事にも疑問を持って追求しようとする姿勢が無いとダメだよ。
0064デフォルトの名無しさん
2012/08/25(土) 19:33:44.95なんでそういう仕様なのか考えるのはまだ意味があるかもしれんが
0065デフォルトの名無しさん
2012/08/25(土) 21:27:58.33誰も覚えてなさそうだけどw
0066デフォルトの名無しさん
2012/08/25(土) 21:29:55.4959様、ありがとうございます。
てっきり複数列挙してもまとめて型宣言できるものと思っていました。
0067デフォルトの名無しさん
2012/08/25(土) 22:39:09.50ユーザーフォームのTextboxに入れようとしても
改行してくれないんですね。
何かいい方法はないですか?
0068デフォルトの名無しさん
2012/08/25(土) 22:44:36.80たぶん MultiLineがFalseになってるだけだと
0069デフォルトの名無しさん
2012/08/25(土) 23:10:05.12ありがとう!
0070デフォルトの名無しさん
2012/08/26(日) 03:13:42.98追求する意味があるものと無いものを見極める能力も無いとダメだよ
何も解ってない状態で割り切って諦めるのと、追求する意味がないことを見極めて
無駄な愚考をしないのは違うからね
0071デフォルトの名無しさん
2012/08/26(日) 09:14:57.64使える、別のアプリ専用、面白い、誰得と何でもいいわ
0072デフォルトの名無しさん
2012/08/26(日) 09:46:58.31具体性のない質問というかネタクレクレはスレ違い
>>2でも行くかググって漁れ
0073デフォルトの名無しさん
2012/08/26(日) 19:11:36.33並び替えられるデータは数字の入った配列で、
比較メソッドはイベントとして使う側で実装する形。
数字=インデックスとして見れば、どんな内容のソートにでも使える。
0074デフォルトの名無しさん
2012/08/26(日) 23:09:08.58Dim ttl As String
If TypeName(buf) = "String" Then
ttl = InputBox("タイトルを入力", title:="タイトル入力", Default:=buf) ←bufは事前にクリップボードからセット
Else
ttl1 = ""
End If
と言うのを作ったのですが、これだと1度に1つの文字列しか取り込めません
1つのダイアログを表示して入力箇所を2つ表示し
同時に2つの文字列を取り込む場合どうすればよいのでしょうか?
0075デフォルトの名無しさん
2012/08/26(日) 23:19:45.240076デフォルトの名無しさん
2012/08/26(日) 23:40:00.070077デフォルトの名無しさん
2012/08/26(日) 23:54:40.85ユーザーフォームが一番スマートだと思うけどね
007874
2012/08/27(月) 00:50:32.74クリップボードから拾わせた文字列を入力の初期値にして
文字列を入力したらVBに取り込んで
シートのフィルターの指定フィールドで抽出させるというのを作ったんだけど
やっぱり複数の文字列で同時にフィルターを掛けたいときが時々ある
同じ内容なんだけど、入力した時期によってキーワードが違っているときとか
0079デフォルトの名無しさん
2012/08/27(月) 01:07:36.070080デフォルトの名無しさん
2012/08/27(月) 21:04:53.28最初でないところ(文中)にも「★」が出てくることがあるので検索して丸ごと置換というわけにもいかず困っています
よろしくお願いします
0081デフォルトの名無しさん
2012/08/27(月) 21:21:09.13Range.Findで探して、Mid$関数で消せば良いんじゃないか?
その条件ならワイルドカードが使えるし。
0082デフォルトの名無しさん
2012/08/27(月) 22:37:49.14SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
たんに全体一致で"★*"を""で置き換えるだけだが。VBAいらね
0083デフォルトの名無しさん
2012/08/27(月) 23:58:40.21↑ので充分だと思うけど
もし範囲が決まっているなら
Sub test()
Dim r As Range
For Each r In Range("A1:B5")
If r Like "★*" Then r = Replace(r, "★", "", 1, 1)
Next r
End Sub
でもどうだろうか
0084デフォルトの名無しさん
2012/08/28(火) 00:23:11.36right(hoge,len(hoge)-1)
0085デフォルトの名無しさん
2012/08/28(火) 05:54:18.560086デフォルトの名無しさん
2012/08/28(火) 06:18:10.500087デフォルトの名無しさん
2012/08/28(火) 07:15:53.67エクセルでやる意味について
0088デフォルトの名無しさん
2012/08/28(火) 07:30:31.18世の中広いな
0089桃白白
2012/08/28(火) 07:31:22.12エクセルはみんなのツールだ。フロントエンドをこしらえるのならなかなかいんじゃないか。
0090デフォルトの名無しさん
2012/08/28(火) 07:35:55.08可能だけどスレ違い
0091デフォルトの名無しさん
2012/08/28(火) 19:27:40.17それぞれのマクロの中で値を指定していれば大丈夫ですよね?
一応動くのですがちょっと不安なので詳しく教えてください
0092デフォルトの名無しさん
2012/08/28(火) 19:29:55.84大丈夫かどうかはソースみないと何とも言えん
0093デフォルトの名無しさん
2012/08/28(火) 19:44:37.890094デフォルトの名無しさん
2012/08/28(火) 20:57:27.14その値が数値の場合は配列に入れ直した方が処理は軽くなるのですか?
範囲は固定ではなく任意です。
環境なくて試せません。お願いします
0095デフォルトの名無しさん
2012/08/28(火) 21:15:15.96配列に移し替える時にループ使うから意味ないと思うけど
0096デフォルトの名無しさん
2012/08/28(火) 21:47:07.44失礼しました、シートから関数を直接呼び出すと挙動が重かったので軽くとかきました。
たしかにループしたら効果半減ですね…
0097デフォルトの名無しさん
2012/08/28(火) 22:13:29.80Sheet1が
A B C
1あ い う
2か き く
3さ し す
となっていて
Sheet2で関連度の表を作っていて
A B C
1 さ し す
2さ 2 0 1
3し0 2 1
4す1 1 2
としています
これを,Sheet1でセルを選択した時に,Sheet2の関連度を呼び出してソートするのはどのように書けばいいでしょうか
例えば,B3[し]を選択したら,Sheet2で[し]をみると関連のある順に[し][す][さ]なので
Sheet1全体を
A B C
1い う あ
2き く か
3し す さ
と並べ替えたいのです
また,このようなソートはどのようにググればやり方が出てきますか?
0098デフォルトの名無しさん
2012/08/28(火) 22:43:26.960099デフォルトの名無しさん
2012/08/28(火) 22:46:56.48Worksheet_SelectionChangeでググってみたらどう?
0100デフォルトの名無しさん
2012/08/29(水) 00:56:26.02ためしにこんなん書いてみたらTest1よりTest2のほうが10倍以上速かった
Sub Test1()
Dim I&, J&, T As Date, R As Range
T = Now
Set R = Cells(1, 1).Resize(65535, 100)
For I = 1 To 65535
For J = 1 To 100
R.Cells(I, J) = I + J
Next J
Next I
Set R = Nothing
T = Now - T
Cells(1, 1) = Format(T, "hh:mm:ss")
End Sub
Sub Test2()
Dim I&, J&, T As Date, R As Range, V As Variant
T = Now
Set R = Cells(1, 1).Resize(65535, 100)
V = R
For I = 1 To 65535
For J = 1 To 100
V(I, J) = I + J
Next J
Next I
R = V
Set R = Nothing
T = Now - T
Cells(1, 1) = Format(T, "hh:mm:ss")
End Sub
0101デフォルトの名無しさん
2012/08/29(水) 00:57:03.37ユーザー定義だとどう書いても重いよね
0102デフォルトの名無しさん
2012/08/29(水) 07:25:09.73ありがとうございます。
引数をvariantにしてしまえばいいのですかね。
試してみます。
>>101
エクセル使う人は、直感的使いたいようで。
配列数式とか駆使して挙動みながら無理のない範囲で作るしかないですよね。
0103桃白白
2012/08/29(水) 11:37:02.40Friendpaste - SortWithForeinKey
https://friendpaste.com/2SD94Big6C5rrUcyFYuphe
桃白白が全力で実装したから試してみて
0104デフォルトの名無しさん
2012/08/30(木) 15:06:34.82http://www.dotup.org/uploda/www.dotup.org3367663.jpg
画像のように、2ページに分かれてそれぞれテキストボックスオブジェクトが2つ有り
上部のボタンを押すと各テキストをテキストファイルとして保存する
という処理を作りたいのですが
1ページだけなら
strREC = ActiveSheet.Shapes.Range(Array("Text Box 7")).TextFrame.Characters.Text
Print #intFreeFile, strREC
という風にして実装できたのですが、
2ページ目にあるテキストボックスオブジェクトを指定する方法が分かりません。
やり方のヒントを教えて下さい。
0105デフォルトの名無しさん
2012/08/30(木) 15:23:23.590106デフォルトの名無しさん
2012/08/30(木) 16:23:19.370107デフォルトの名無しさん
2012/08/30(木) 16:27:27.690108桃白白
2012/08/30(木) 17:52:44.75画像ではText Box 7って2ページ目のテキストボックスなんでない?
ページ変わってもテキストボックス取得する方法は変わらんだろ
テキストボックスを選択したら左上にテキストボックスの名前が表示されるから、そこに桃白白と入力して
ActiveSheet.Shapes("桃白白").TextFrame.Characters.Textでいけるっしょ
0109デフォルトの名無しさん
2012/08/30(木) 23:44:46.08もし、開いていたらそのままシートの内容をコピーして、
開いていなかったら、開いてコピー後、対象ブックを閉じる
というのをやりたいです。
0110デフォルトの名無しさん
2012/08/30(木) 23:53:28.430111桃白白
2012/08/31(金) 00:02:07.39For Eachでぐーるぐる
Sub TestFindWorkbook()
Dim book As Workbook
Set book = FindWorkbook("C:\Users\a\Documents\桃白白.xlsm")
:
End Sub
Function FindWorkbook(ByVal fullName As String) As Workbook
Dim w As Workbook
For Each w In Excel.Workbooks
If (w.fullName = fullName) Then
Set FindWorkbook = w
Exit Function
End If
Next
Set FindWorkbook = Nothing
End Function
0112デフォルトの名無しさん
2012/08/31(金) 00:33:06.46A.xls が直接開かれたか、他ブック(B.xls、C.xls、D.xls)から
VBA-Workbooks.Openで開かれたかを
A.xls側から判断するのに適した方法ご教示願います。
今現在の方法としては、AにWorkbook_Open時に開いているブック名を調べ、
B、C、Dに該当するファイル名が開かれたら、他ブックより開かれた。と判定させています。
(偶然ですが>109-111さんの流れのようなもの)
ただしこの場合だとAを直接開く際、Bが既に起動中でも該当してしまいます。
条件として個人用マクロは使用せずにてクリアしたく、よろしくお願いします。
0113デフォルトの名無しさん
2012/08/31(金) 07:10:08.530114デフォルトの名無しさん
2012/08/31(金) 08:24:31.300115デフォルトの名無しさん
2012/08/31(金) 08:44:54.04A.xls側が判断するタイミングはいつ?いつでも?
0116デフォルトの名無しさん
2012/08/31(金) 09:55:33.99他ブックからオープンしたときは
A.xlsのどこか任意のセルにその呼び出し元を記述させるようにしたら良いんでない?
たとえばB.xlsからオープンしたら
Workbooks.open(A.xls)
Activeworkbook.sheets(1).cells(1,1)="B.xls"
みたいに
0117デフォルトの名無しさん
2012/08/31(金) 10:34:50.970118デフォルトの名無しさん
2012/08/31(金) 12:16:22.91http://www.moug.net/tech/exvba/0060076.html
これ参考にならないかな?
0119デフォルトの名無しさん
2012/08/31(金) 16:48:56.27変数 = A1.value
A1のセルには、文字列helpme
となっているところを
A1にhelp
A2にme
としたとき、
変数= なんて.value書けばいいですか?
0120デフォルトの名無しさん
2012/08/31(金) 17:13:04.83ってことか?
0121デフォルトの名無しさん
2012/08/31(金) 17:13:52.47質問するならちゃんとしたコードで書いてよ
普通に考えて
変数 = A1.value
は「セルA1の値を変数に代入する」という意味のコードとしては
まともなコードとはいえない
これが「セルA1の値を変数に代入する」という意味のコードとして成立するためには
表記中の「A1」が「セルA1を意味するオブジェクト変数」である必要があるけど
それは>>119の質問内容からは確定できない
ちゃんと動作するコードとして書くなら
変数 = Cells("A1").Value
みたいに書いてないとおかしい
で、そういう意味であるなら
変数 = Cells("A1").Value & Cells("A2").Value
とすれば要求を満たせる
0122桃白白
2012/08/31(金) 17:25:14.21Range("A2") = Right(Range("A1"), 2)
Range("A1") = Left(Range("A1"), 4)
0123デフォルトの名無しさん
2012/08/31(金) 17:41:04.79それは意味が違うんじゃない?
0124デフォルトの名無しさん
2012/08/31(金) 18:30:31.900125デフォルトの名無しさん
2012/08/31(金) 18:40:22.16>>119は意味分からんでもそれへの回答で理解できただろ
0126112
2012/08/31(金) 20:04:45.71Aが呼び出されて直後の必要があります。
Workbook_Open起動時に本来やるべき処理があって、
それを実行する条件として、BCDから開かれたときのみとしたい。
という感じです。(直接起動時は実行したくない)
>>116
ちょうど↑の内容に絡む分ですが、オープンした後だと
分岐条件作る前にAのWorkbook_Openが走ってしまうのでダメでした。
>>118
読み取り専用に関する内容でした。
少し今回の件とは異なるように見受けられました。
>>115-118
ありがとうございました。
何か他の手を考えてみようと思います。
ってレス書いているホント今。思い浮かびました。
>116の内容をAじゃなく、開きに行くブックBCD自身にすればいいのですね。
Aを開く処理時に自ブックのCells(1,1)="flag"として
Aが開いたらCells(1,1)=""にする。
AからはBCDの存在調査じゃなく、BCD存在調査後、cells1,1の値を調べさせればいいのですね。
if Cells(1,1)="flag" then マクロから起動。 else 自己起動。見たいに。
どうもありがとうございました。
0127デフォルトの名無しさん
2012/08/31(金) 20:12:25.23これでできますた!!!ありがとう!
0128デフォルトの名無しさん
2012/08/31(金) 20:16:13.19エクセルファイルを開いている日(毎日)からみて次の月曜日の日付を取得するにはどうすればいいですか?
つまり火曜日に開いても木曜日に開いても来週の月曜日の日付を表示し、来週には再来週の日付を表示するということです。
0129112
2012/08/31(金) 20:31:39.46=TODAY()+9-WEEKDAY(TODAY())
月曜日に開いた場合の処理が指示されていないから、そこはつけたしてくだしあ。
0130デフォルトの名無しさん
2012/08/31(金) 20:34:43.70日曜日の判定も必要ですな。>129だと不完全です。
WEEKDAY(TODAY()) = 0と1のとき分岐してください。
0131デフォルトの名無しさん
2012/08/31(金) 21:13:03.84>>114はダメだったのか?
0132デフォルトの名無しさん
2012/08/31(金) 21:14:54.310133デフォルトの名無しさん
2012/08/31(金) 21:17:13.60全角文字で
0134デフォルトの名無しさん
2012/08/31(金) 21:18:26.750135デフォルトの名無しさん
2012/09/01(土) 00:26:56.53これってどういう意味?
0136デフォルトの名無しさん
2012/09/01(土) 00:36:13.970138デフォルトの名無しさん
2012/09/02(日) 21:54:53.26をマクロにしようと思い、以下を書いた
Dim cell As Range
For Each cell In Selection
If cell.Value >= Date Then
cell.Font.ColorIndex = 3
Else
cell.Font.ColorIndex = 1
End
Next
実行するとNextに対するForが無いと言われる
If〜Endをコメントブロックすると、ループは廻ります、何がいけないのでしょうか?
0139デフォルトの名無しさん
2012/09/02(日) 22:03:18.22○End If
0140デフォルトの名無しさん
2012/09/02(日) 22:03:38.33end じゃなく end ifでは?
0141デフォルトの名無しさん
2012/09/02(日) 22:04:45.00最後から2行目の「End」は「End If」でしょ。
0142デフォルトの名無しさん
2012/09/02(日) 22:13:18.95有り難うみんな
0143デフォルトの名無しさん
2012/09/02(日) 23:06:48.44公式テキストの解答で1つ理解できないものがありまして・・・。
0144デフォルトの名無しさん
2012/09/02(日) 23:13:57.52非常識な行動じゃないと思えるほどのバカなら好きにしたらいいさ。
0145デフォルトの名無しさん
2012/09/02(日) 23:48:20.43いや、実際の試験では無くて公式テキストのサンプル問題です。
ちょっと理屈が良く分からない部分がありまして。
0146デフォルトの名無しさん
2012/09/03(月) 00:14:38.180147デフォルトの名無しさん
2012/09/03(月) 01:33:06.43日本の不幸は中国と朝鮮だ。
この二国の人々も日本人と同じく漢字文化圏に属し、同じ古典を共有しているが、
もともと人種的に異なるのか、教育に差があるのか、 日本との精神的隔たりはあまりにも大きい。
地球規模で情報が行き来する時代にあって、近代文明や国際法について知りながら、
過去に拘り続ける中国・朝鮮の精神は千年前と違わない。
国際的な紛争の場面でも「悪いのはお前の方だ」と開き直って恥じることもない。
もはや、この二国が国際的な常識を身につけることを期待してはならない。
「東アジア共同体」の一員として その繁栄に与ってくれるなどという幻想は捨てるべきである。
日本は、大陸や半島との関係を絶ち、 欧米と共に進まなければならない。
ただ隣国だからという理由だけで特別な感情を持って接してはならない。
この二国に対しても、国際的な常識に従い、国際法に則って接すればよい。
悪友の悪事を見逃す者は、共に悪名を逃れ得ない。
私は気持ちにおいては「東アジア」の悪友と絶交するものである。
_,,,,,,__ __,,,__
ィjj)))))))))!!!!!彡ヽ,
/ミ/ ,}彡ヘ
|ミ{ -‐ ‐ ‐ ‐- {三=|
El==; ゚ ''==. |ミミ,|
`レfォ、,〉 :rfォ.、, !iル┤
. { `¨ i ・、¨ ´ `{ゞ'} 支那、朝鮮とは
. | '`!!^'ヽ .「´ 付き合うなと忠告しておいたのに。。。
! ,-ニ'¬-、 ,!|,_
. \´?` / ∧ヘ、
__/〉`ー ' ´ / 〉 \
_, ィ´「∧ / / 」¬ー- 、_
-‐ ´ / / ヽ、/ / iヾ ヽ
0148デフォルトの名無しさん
2012/09/03(月) 14:20:50.18公式テキストの問題と解答をまるごとここに書くのならともかく、納得できない一問について
ここに書くことのどこに問題があるのか?
0149桃白白
2012/09/03(月) 15:19:53.53VBAの設問なのか? 何だったら桃白白がお答えしちゃうけど? 貼っちゃいなよ
0150デフォルトの名無しさん
2012/09/03(月) 20:55:59.52気になるから貼ってくれよ
0151デフォルトの名無しさん
2012/09/03(月) 21:54:07.61エクセルファイルをメールで送信するコード、つまり
Application.Dialogs(xlDialogSendMail).Show
を使いましてメールを送信する際、引数の"Arg1"つまり「メール宛先」に
複数人のアドレスを入れる関係上、宛先文字列が256文字を超えてしまいます。
255文字以内に収めれば、上手くメーラーが起動してメール送信準備が
されるのですが、256文字を超えると、エラーが出るわけでもなく
ただメールが立ち上がらないという状態になります。
対策をする前に、なぜここで256文字を超えたらダメなのか、を一応
知っておきたいです。どなたか、知っていたら教えてください!
0152デフォルトの名無しさん
2012/09/03(月) 22:24:12.60容量的な問題255バイトまで
0153デフォルトの名無しさん
2012/09/03(月) 22:27:48.90のですが、10世代ぐらいループさせるとExcelが固まります
何が原因か教えていただけませんか?
Windows 7 Ult x64、Excel 2010です
0154デフォルトの名無しさん
2012/09/04(火) 00:07:02.26ワークシートとデータベースって
どっちを使おうっていう判断基準を教えてください
ファイルサイズを考えて、どちらも外部ファイルにデータを置くとした場合。
0155デフォルトの名無しさん
2012/09/04(火) 00:24:44.36具体例を挙げてくれれば助言はできるけど
そんなもん一概に言えないよ
0156デフォルトの名無しさん
2012/09/04(火) 00:30:58.400157デフォルトの名無しさん
2012/09/04(火) 00:40:54.731000×3ぐらいの数値テーブルが、数十個あって
ランダムな場所を幾度も読み込んで計算するような感じです
速度が求められます
シートにおさまるんだけど、どちらがいいのかな〜と。
0158157
2012/09/04(火) 00:48:49.04配布やら設定やらの問題でvbaで完結させたい。
0159デフォルトの名無しさん
2012/09/04(火) 01:03:28.500160デフォルトの名無しさん
2012/09/04(火) 01:19:21.98それ以外なら好きにしろ
0161デフォルトの名無しさん
2012/09/04(火) 04:33:32.77その程度のデータ量なら配列に一気に読み込んでから計算するのが一番処理が速い
0162桃白白
2012/09/04(火) 05:52:03.40スリープのあとにDoEventsを呼ぶようにしたら
10000回ループしても問題なかったよ
Call VBA.Interaction.DoEvents
理屈は知らん、寝るのに忙しくて表示を更新できません的なことなんじゃね
0163デフォルトの名無しさん
2012/09/04(火) 06:51:00.28アルゴリズムの方が大事だ
0164デフォルトの名無しさん
2012/09/04(火) 07:11:04.98シートとのやり取りのコストも、これはこれで馬鹿にならないよ。
>>153
x64Win8+Excel2013で動かしてみたけど固まりはしないな。
ただ、ESCキーでの実行中断が何故か効かなくなった。
0165153
2012/09/04(火) 07:57:06.49固まらなくなりました。ありがとうございます
ちょっと理屈調べてみたいと思います
>>164
環境にもよるみたいですね。テストありがとうございました
0166デフォルトの名無しさん
2012/09/04(火) 09:26:27.40余計なお世話かも知れないが、
プログラムが動作するしない以前の問題として
変数の宣言が間違ってる。
dim a,b as integer
だと、aがVariant型、bがInteger型になる。
あと、変数名間違ってるのが数カ所あった。
Option Expricitで変数の宣言を強制する癖をつけた方が良いと思う。
0167166
2012/09/04(火) 09:31:39.92×Expricit
○Explicit
0168デフォルトの名無しさん
2012/09/04(火) 18:33:21.310169151
2012/09/04(火) 18:52:25.13ありがとうございます。その255バイトまでっていうのが
何の仕様なのかが、どうも掴めなくて気持ち悪いんです。
変数の型はバリアントにしているので、変数の型によって255バイト
っていう制限がかかるわけじゃないし
Application.Dialogs(xlDialogSendMail).Show の引数は255バイト
までと決まっている(仕様)、ということなんでしょうか?
0170デフォルトの名無しさん
2012/09/04(火) 19:26:37.09メールのtoフィールドが255バイト以下ってのはRFCで決まってたはず
それ以上送りたい場合はtoフィールド自体の数を増やせばいいんだけど、
受け取った側から見るとあんまり気分の良い物じゃないのでBCCなどを使った方がいい
0171桃白白
2012/09/04(火) 20:06:56.45マジで!? メールアドレスの最大の長さが255文字でTOが複数のアドレスを含むことが
できるとするなら理屈としてはTOは255文字以上を許容しないといけないんじゃね?
>>151
配列でアドレスを指定できるんじゃね?
Application.Dialogs(xlDialogSendMail).Show Array("桃白白さん", "ブルマさん")
みたいにして
0173デフォルトの名無しさん
2012/09/04(火) 23:30:33.17自作鯖ならsendmailmaxなんちゃらみたいな設定がたぶんhtod.confとかにあると
思ったけど
to Cc Bccでの上限数はあまり変わらないんじゃないか
0174デフォルトの名無しさん
2012/09/05(水) 00:43:55.42VBAがというか大本のVBがそういう仕様だからなぁ
つか知らなきゃそう書いちゃうよな
0175デフォルトの名無しさん
2012/09/07(金) 12:02:31.87For shapeCounter = 0 To .Shapes.Count --- (※)
Dim tempShape As Shape
Set tempShape = mySheet.Shapes(shapeCounter)
(略)
Next
このようにShapeオブジェクトを取得していたのですが、
別のマシンで動作させると3行目で停止してしまいます。
そこで、(※)を
For shapeCounter = 1 To .Shapes.Count + 1
に変えると正常に動作しました。
officeのバージョンによってこのような事が起こるのでしょうか?
もしそうだとしたらどこかにその情報のソースは無いでしょうか?
0176デフォルトの名無しさん
2012/09/07(金) 12:47:57.33まだまだ初心者なので、VBAについてお詳しい方、
ExcelのVBAでのテーブル作成方法を教えてください。
0177デフォルトの名無しさん
2012/09/07(金) 12:51:57.92�E年齢�F生年月日�F職業�G男性人口±�H女性人口±�I全体の人口±といったところです。
このデーターを格納し帳票に飛ばしカウントアップしてデイリー分の男性、女性の転出、転入を出力データとしてまとめ
総人口数を求めるようにしたいのですが。
0178デフォルトの名無しさん
2012/09/07(金) 13:06:18.190179桃白白
2012/09/07(金) 13:34:55.59Excel 2007 で Shapes オブジェクトのインデックスに不正な値 0 を指定してもエラーにならない
http://support.microsoft.com/kb/2699812/ja
これかな。
For Toでぐるぐるするなら
For shapeCount = 1 To .Shapes.Count
にしないと0からCountまでぐるぐるしたらCount + 1のShapeが存在することになっちゃう。
Shapesオブジェクトの実装はたぶん線形リストで
序数が大きくなるほどアクセスするのに時間がかかるから
For Eachでぐるぐるしたほうがいいよ。
For Each tempShape In .Shapes
Next
0180桃白白
2012/09/07(金) 13:39:04.73データベースがメインになるんなら
Accessでやっちゃった方がよくね?
0181デフォルトの名無しさん
2012/09/07(金) 13:58:48.610182桃白白
2012/09/07(金) 14:17:45.26データベースに何を使うかは決まってんの? MDB?
0183デフォルトの名無しさん
2012/09/07(金) 15:37:49.260184桃白白
2012/09/07(金) 19:38:37.15ゾウさんのやつな、かっけーよな
0185デフォルトの名無しさん
2012/09/08(土) 02:27:32.71excel vba でIE object のコントロールで
ajaxを起動できますか?
fireeventでjavascriptはわかったのですが
selectにonclickがなくajaxでload window
しているものがありどう呼び出せばよいか
悩んでます
0186デフォルトの名無しさん
2012/09/08(土) 04:45:25.16VBAとは、『Visual Basic for Applications』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
0187デフォルトの名無しさん
2012/09/08(土) 08:35:29.780188デフォルトの名無しさん
2012/09/08(土) 09:29:19.830189187
2012/09/08(土) 09:30:46.590190デフォルトの名無しさん
2012/09/08(土) 09:41:15.340191デフォルトの名無しさん
2012/09/08(土) 09:48:31.79的外れかもしれないけどブックマークレットで呼ぶとか?
http://shokai.org/blog/archives/1234
0192デフォルトの名無しさん
2012/09/08(土) 20:57:56.13DAOとかADOとかでExcelをRDBみたいにSQLで扱えるから
そういう感じでやれば良いんでね
やり方はググって好きな方法選んでくれ
0193桃白白
2012/09/09(日) 01:50:11.990194デフォルトの名無しさん
2012/09/09(日) 02:17:54.45次買うときはケチらずに無期限ライセンスのを買えよ
0195桃白白
2012/09/09(日) 02:27:17.22桃白白貧乏だから買えないの。寄付する? するんだったら桃白白はその好意を決して断らない
ことをここに誓う用意があるけど?
0196デフォルトの名無しさん
2012/09/09(日) 04:13:41.720197デフォルトの名無しさん
2012/09/09(日) 07:12:31.16互換Office使えばタダだよ
VBA使えないけど
0198デフォルトの名無しさん
2012/09/09(日) 07:31:11.37貧乏な上に知識も多少の回答は出来るが並以下レベルで、頭の回転も弱い奴となると、
べつに回答者を続けてくれなくても誰も困らないから、Excelの使用期限と共に消えてくれて
一向に構わないな
0199桃白白
2012/09/09(日) 10:38:47.13/⌒ヽ)
i三 ∪
○三 |
(/~∪
三三
三三
三三三
0200デフォルトの名無しさん
2012/09/09(日) 15:24:00.49俺も貧乏だから寄付しないけどタオパイパイ嫌いじゃないよ
これからは回答せずに
にぎやかしでAA貼ってりゃいいじゃん
0201デフォルトの名無しさん
2012/09/09(日) 15:26:03.47波になってあなたへ向かってく
私の歌がデムパになって
波になってあなたへ響いてく
私の愛がデムパになって
波になってあなたへ届いてく
私の電子回路が短絡する前に
Electric LOVE Electric LOVE
(∩ ゚д゚) アーアー
この気持ちあなたに届くかな
0202デフォルトの名無しさん
2012/09/10(月) 11:09:37.38図のオブジェクトがどういうわけかコピペされないんです。
どうすればこの図のオブジェクトも正しくコピペされて他のシートにも表示させるようにできますか?
0203デフォルトの名無しさん
2012/09/10(月) 11:21:30.080204202
2012/09/10(月) 11:31:04.490205デフォルトの名無しさん
2012/09/10(月) 11:37:58.190206202
2012/09/10(月) 11:40:24.57列は3、行は20くらい、
図はちょうどど真ん中あたりにあり、1つのセルと同じくらいの大きさなのに。
0207デフォルトの名無しさん
2012/09/10(月) 14:03:16.08その影響じゃね確かめてないけど
0208デフォルトの名無しさん
2012/09/10(月) 14:23:25.83コードも貼らずに・・・VBAでコピペといっても丸ごと・値だけ・図だけ・云々
値だけコピぺのコードになっていないか?
0209デフォルトの名無しさん
2012/09/10(月) 15:30:15.55import os
import win32com.client
def test_auto_shape(filename):
xl = win32com.client.Dispatch('Excel.Application')
xl.Visible = True
try:
book = xl.Workbooks.Open(filename)
sheet = book.Worksheets(2)
rs = "A10:D20"
sheet.Select()
sheet.Range(rs).Select()
xl.Selection.Copy()
sheet = book.Worksheets(1)
sheet.Select()
sheet.Range(rs).Select()
xl.Selection.PasteSpecial()
finally:
xl.Workbooks.Close()
xl.Quit()
if __name__ == '__main__':
test_auto_shape(os.path.abspath(u'autoshape_copy.xls'))
0210デフォルトの名無しさん
2012/09/10(月) 15:36:44.240211デフォルトの名無しさん
2012/09/10(月) 15:39:18.22import os
import win32com.client
def test_auto_shape(filename):
xl = win32com.client.Dispatch('Excel.Application')
xl.Visible = True
try:
book = xl.Workbooks.Open(filename)
sheet = book.Worksheets(2)
rs = "A10:D20"
sheet.Range(rs).Copy(book.Worksheets(1).Range(rs))
finally:
xl.Workbooks.Close()
xl.Quit()
if __name__ == '__main__':
test_auto_shape(os.path.abspath(u'autoshape_copy.xls'))
0212デフォルトの名無しさん
2012/09/10(月) 15:43:04.570213デフォルトの名無しさん
2012/09/10(月) 15:50:50.020214デフォルトの名無しさん
2012/09/11(火) 11:33:18.800215デフォルトの名無しさん
2012/09/14(金) 05:33:23.350216デフォルトの名無しさん
2012/09/14(金) 08:02:53.370217デフォルトの名無しさん
2012/09/14(金) 21:32:53.98この値だと例え同じ4:07でもFIndでヒットしません。
TimeValueを使おうにもTimeValue(0.17152.......)となってしまいdate型にもできないです。
方法はないでしょうか?
0218デフォルトの名無しさん
2012/09/14(金) 22:03:01.30A1セルに"4:07"を入力してFindでヒットしたけどなんか解釈間違ってる?
Dim r As Range
Set r = Range("a1").Find("4:07")
If Not (r Is Nothing) Then
Debug.Print r.Text
End If
0219デフォルトの名無しさん
2012/09/14(金) 22:13:37.27Debug.Print Range("a3").Value
とすると小数点の値になりませんか?
0220デフォルトの名無しさん
2012/09/14(金) 22:14:46.160221デフォルトの名無しさん
2012/09/14(金) 22:27:11.83これが質問じゃないの?何が質問なの?
0222デフォルトの名無しさん
2012/09/14(金) 22:28:37.96エクセルのテキストファイル読み込みでRange("A1":"A10")まで
16:08
16:40
18:23
19:49
20:18
16:08
3:59
15:02
19:49
19:49
の値が入っているとします。
Dim r As Range
Set r = Range("A1":"A10").Find(Range("A1"))
というコードの場合に
Find(Range("A1"))は小数点0.0***********の様な値を検索するようです。
その場合は例え同じ小数点の値でもヒットしません。
0223デフォルトの名無しさん
2012/09/14(金) 22:38:50.60Set r = Range("A1":"A10").Find(Range("A1").text)
にするとか
0224デフォルトの名無しさん
2012/09/14(金) 22:47:46.79ででででできました。
ありがとうございました。
.text メモメモ
0225デフォルトの名無しさん
2012/09/14(金) 22:49:02.72.Textで検索すればいけるんじゃね
0226デフォルトの名無しさん
2012/09/15(土) 04:10:49.15とあるエクセルファイルのマクロを実行する前に、実行対象PCかを判定する必要があります。
PC名等で細かく指定することでクリアできますが、対象PCがかなり多いため、
以下条件を踏まえて捌こうと考えています。
「マクロを実行したい対象PCにのみ、専用のマクロが入った個人用マクロブックが既に設置されている」
という条件より、もともと設置済みの個人用マクロブックを判定して対象PCとする。
が良いと考えました。
これより、
Onerror goto ERR1
Application.Run "PERSONAL.XLS!判別マクロ名"
Hanbetu = 1
ERR1:
といった単純な内容で達成したかと思っていたのですが、
PERSONAL.XLSB(最後にB)なるものが存在し、エラーを返される事がわかりました。
どうやら新しいEXCELにはXLSBらしいのですが、
この場合にも対応するにはどうすればいいでしょうか?
Onerror goto ERR1
Application.Run "PERSONAL.XLS!判別マクロ名"
Hanbetu = 1
ERR1:
Onerror goto ERR2
Application.Run "PERSONAL.XLSB!判別マクロ名"
Hanbetu = 1
ERR2:
もし一つのマクロでONERRORが2個使えたらこんなイメージなのですが、
そのやり方を知らず、回避できませんでした。
ご教示お願いします。
0227226
2012/09/15(土) 05:03:52.12For Each wb In Workbooksと
以下2つは同じであることを利用。
Left(personal.xls,12)
Left(personal.xlsb,12)
個人用マクロブックを見つけ、そのときの名前を拾う形でうまくいきました。
For Each wb In Workbooks
If LCase(Left(wb.Name, 12)) = "personal.xls" Then
PSBname = wb.Name
End If
Next wb
あとは適当に>226を付け足して
If PSBname = "" Then
GoTo pointA
End If
On Error GoTo pointA
Application.Run PSBname & "!判別マクロ名"
Hanbetu = 1
pointA:
MsgBox Hanbetu
個人用マクロブックに判別マクロ名があるPCを判定することができました。
ありがとうございました。
0228デフォルトの名無しさん
2012/09/15(土) 14:38:49.880229デフォルトの名無しさん
2012/09/15(土) 14:43:02.60>1 ExcelのVBAに関する質問スレです
>>228
>ExcelVBA以外のプログラミング言語を
スレチです。
0230デフォルトの名無しさん
2012/09/15(土) 18:03:26.07どんな知識だって有って損になるわけじゃないと思うけど、
そもそも営業にVBAの知識って要る?
事務はVBAで自分の業務を改善できるかもしれないけど、
営業ってPC弄るんじゃなくて人と会ってナンボの仕事でしょ?
0231デフォルトの名無しさん
2012/09/15(土) 21:11:33.85…それとも必要ありませんか…
ちなみにwindows7 excel2010です。
始めて1日目なんですが、どうもいわゆる入門書とかサイトとか見てても、
「仕様はそこそこわかった。ではこれからどうするの?」ってなりがちなのですが…
みんなは設計書とか書くんですかね?
0232デフォルトの名無しさん
2012/09/15(土) 21:27:53.16>設計書とか書くんですかね?
全く俺専用のプライベートのものだけど、最近はテキストファイルに予め作るようにしている。
作っている間にあそこをこうしないといけない、あの処理もいるな…などいろいろ出てきたりするんで。
0233デフォルトの名無しさん
2012/09/15(土) 21:34:40.61B.xlsにmacroBがあり
A.xlsのmacroA---------------
sub macroA()
Workbooks.Open B.xls
end sub
B.xlsのmacroB---------------
sub Auto_Open()
Workbooks(A.xls).close
msgbox "確認"
end sub
こういった異なるブックを呼び出し、
呼び出された側が呼び出したブックをクローズすると、
そこでマクロ止まっちゃいました(msgbox 確認が出ない)
どうにかして次の処理に進める方法ありませんか?
0234デフォルトの名無しさん
2012/09/16(日) 03:05:46.35そもそもWorkbooks.Openで開いたら、Auto_Openは実行されなかったはずだが
それちゃんと実行されてるか?
単にエラーー出ても無視したいだけなら On Error Resume Next 使え
0235デフォルトの名無しさん
2012/09/16(日) 03:38:14.45ゴメ、ブックオープンマクロだった。
ちなみにやっぱダメみたいね。
エラー出してくれるなら拾えるんだけど、.closeにて閉じた跡、
エラーも出さずにそこで止まる。仕様だね。
さっきB.xlsからVBSへ切り替えて完成した。
どうもありがとう。
0236デフォルトの名無しさん
2012/09/16(日) 08:05:02.59回答ありがとうございます。
少々質問が悪かったのですが
僕が言いたいのは設計センスというか設計法のことについてであり
(たとえばジャクソン法だのモジュール設計だのって言葉がネットでは調べればでてきますよね)
そういうのは一切なしで、結局はとにかく「プログラムにさせたい動作を日本語で書いて、
それをそのまま言語に落としこめるだけの作業を作成者はするだけだ」ということなんでしょうかね?
なんだかたかがVBAに自分は気難しく考えすぎなようも気がします…
0237236
2012/09/16(日) 08:07:09.27でも疑問なんでだれかたすけてー
0238236
2012/09/16(日) 08:11:14.421まず、VBAの仕様はわかります
2しかしこれからどうすればいいのかわかりません
3モジュール設計とかそういう設計や仕様書の勉強したほうがいいの?
という理屈なわけです。
0239デフォルトの名無しさん
2012/09/16(日) 10:48:57.05Application.OnTimeではダメかな
0240デフォルトの名無しさん
2012/09/16(日) 10:51:22.60一番大事なのは、「何」をしたいのかを明確にすることじゃないかな?
例えば
VBAを使って「集計レポートの作成」をしたいとか
VBAを使って「入力フォームの作成」をしたいとか
0241デフォルトの名無しさん
2012/09/16(日) 11:05:32.47とにかく書いてセンスを養えばいいと思う。
テスト技法なんかは気にした方がいいかな。
人に配ったマクロにバグがあると一気に信用を無くす可能性がある。
0242デフォルトの名無しさん
2012/09/16(日) 11:27:44.78設計しないとコーディングできない
設計書に落とし込むか脳内で完結するかは規模次第
テスト設計も然り
0243デフォルトの名無しさん
2012/09/16(日) 12:57:56.70あーその手があったかぁ。
今回はVBSで逃げたけど、今までApplication.OnTimeって
使ったこと無かったけど、色々過去振り返ると便利に使えそうなシーンざくざく出てきそう。
ちょっと練習がてらに使ってみるかな。
0244236
2012/09/16(日) 15:26:55.47>>240.241.242 氏
回答ありがとうございます。
書いて書いて書きまくれとは、今、小説書いてたりするんですけど
クーンツの本でも同じことが書いてありました。結局「やらないことには始まらない」ということですね。
一応テスト設計という言葉も調べてみようと思います。
0245デフォルトの名無しさん
2012/09/16(日) 15:56:33.380246デフォルトの名無しさん
2012/09/16(日) 16:00:31.07ママのおっぱいでも吸ってろ
0247桃白白
2012/09/16(日) 17:09:54.60桃白白もかわいくておっぱいが大きいママが欲しかったよ。
ぜったいちゅーちゅーしたいよ、ちゅーちゅーとれいんを一緒に踊りたいって
意味だからな、そういうアクティブでカッコいい母親がいればいいってことだからな。
0248デフォルトの名無しさん
2012/09/16(日) 22:18:55.01新規ブックで同じコードを書くと動作します。なぜですか?
Worksheets("sheet1").Cells(1, 2).Value = 479
Worksheets(1).Cells(1, 1).Value = 476
0249デフォルトの名無しさん
2012/09/16(日) 22:47:59.82開発中のブックにWorksheets(1)がなくて
新規ブックにWorksheets(1)があるからじゃない?
0250デフォルトの名無しさん
2012/09/17(月) 00:00:09.67Worksheets(1)をSheets(1)に書き換えてみ
もしそれで動いたんならインデックス番号1のシートの種類がワークシートじゃないって事
0251デフォルトの名無しさん
2012/09/17(月) 02:47:25.92動作しませんってのは具体的にどういうことなんだ
単にお前が思ってるシート(sheet1)以外のシートに値がセットされてるだけじゃないのか?
試しに MsgBox Worksheets(1).Name を間にいれて何が表示されるかみてみ
>>249-250
Worksheetsってワークシートだけのコレクションだと思ったんだが
Worksheets("sheet1")があるのにWorksheets(1)が無いなんてこと起きるのか?
0252デフォルトの名無しさん
2012/09/17(月) 06:54:21.58.Nameで確認したら僕が思っているWorksheetsではなく
その左にWorksheetが隠れていたようです。
解決しましたありがとうございました。
どうも一度ウインドウの横幅を細くして左下の右矢印を押して隠した後に
横幅を戻しても隠れたままになるようです。
0253デフォルトの名無しさん
2012/09/17(月) 08:50:46.62書いて書いて書きまくれっていうのも、効率悪い。
一般的に言われるのはこんなところ。
・1関数1機能
・1関数は100行以内
・一文字変数は厳禁(iとかjとかkとか)
言語は違うけど、こんなサイトを参考にできるかと。
Cプログラミング診断室
http://www.kojima-cci.or.jp/fuji/mybooks/cdiag/
あとは、お作法程度だけどこんなのもある。
ハンガリアン記法
http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%82%AC%E3%83%AA%E3%82%A2%E3%83%B3%E8%A8%98%E6%B3%95
0254デフォルトの名無しさん
2012/09/17(月) 09:11:12.86> Worksheets("sheet1")があるのにWorksheets(1)が無いなんてこと起きるのか?
そんなん普通にあるだろ
新規ブックに対してSheet1の左側にグラフシートを追加すれば簡単に再現できる
0255デフォルトの名無しさん
2012/09/17(月) 12:55:34.00OffsetとResizeで範囲?が取得できると思うんですが、この範囲に入ってる
数字の合計を出したい場合、どのように書けばいいですか?
Range("A1").Offset(1, 1).Resize(2, 0)
↑たとえばこの範囲に入ってるセルの合計をVBAでもとめたい
よろしくおながいします。
0256デフォルトの名無しさん
2012/09/17(月) 13:10:01.88WorksheetFunction.Sum(Range("A1").Offset(1, 1).Resize(2, 1))
0257デフォルトの名無しさん
2012/09/17(月) 13:17:55.79おおお、ありがとうございます!
SUMも試したんですが、問題はResizeの引数の側だったとは…。
すません、助かりました。
0258デフォルトの名無しさん
2012/09/17(月) 17:33:27.22再現しないんですが?
Worksheetsはワークシートだけのコレクションだから、グラフシートがあっても関係ないんですが
Sheets(1)がWorksheets(1)じゃないって状況ならいくらでも存在するがな
0259デフォルトの名無しさん
2012/09/17(月) 19:01:34.010260デフォルトの名無しさん
2012/09/17(月) 19:04:17.920261デフォルトの名無しさん
2012/09/17(月) 19:05:31.080262デフォルトの名無しさん
2012/09/17(月) 19:14:32.75Range("A1", Cells(1, 1).SpecialCells(xlLastCell)).Select
0263デフォルトの名無しさん
2012/09/17(月) 19:17:14.80同じだけど
Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).Select
0264デフォルトの名無しさん
2012/09/17(月) 19:25:21.64できました
ありがとうございます
0265デフォルトの名無しさん
2012/09/17(月) 19:26:59.29シートが10ぐらいあって、そのうち5枚だけに以下の作業させたい
・1から10行までで一列目に何も入ってない行を非表示にする
これどうしたらいいの?
記録でやってみるんだけど、最初のシートしか非表示にならないんだ
0266デフォルトの名無しさん
2012/09/17(月) 19:39:11.70とりあえずこれ見て考えて
Dim i As Integer
Dim row As Integer
For i = 1 To 5
With Worksheets(i)
For row = 10 To 1 Step -1
If .Cells(row, 1).Value = "" Then
.Cells(row, 1).EntireRow.Hidden = True
End If
Next
End With
Next
0267デフォルトの名無しさん
2012/09/17(月) 19:44:13.80これって右のシートから順に5つに動作する?
0268デフォルトの名無しさん
2012/09/17(月) 19:45:17.93どうしたらいい?
0270263
2012/09/17(月) 20:17:27.38試しても無いんだけど、あってるほうで頼む>262-263
0271デフォルトの名無しさん
2012/09/17(月) 20:27:49.57Dim row As Integer
Dim sheetnames
Dim sheetname
sheetnames = Array("予算", "名前1", "名前2", "名前3", "名前4")
For Each sheetname In sheetnames
With Worksheets(sheetname)
For row = 10 To 1 Step -1
If .Cells(row, 1).Value = "" Then
.Cells(row, 1).EntireRow.Hidden = True
End If
Next
End With
Next
とりあえずこれ理解するまで次の質問禁止な
0272デフォルトの名無しさん
2012/09/17(月) 20:35:37.82If Cells(r, 1) = "" Then Rows(r).Hidden = True
0274デフォルトの名無しさん
2012/09/17(月) 21:00:44.512012/8/23 10:44:24
を秒数に変換する方法を教えてください。
0275デフォルトの名無しさん
2012/09/17(月) 21:02:29.240276デフォルトの名無しさん
2012/09/17(月) 21:04:09.860277デフォルトの名無しさん
2012/09/17(月) 21:24:12.98=Int(Range("A1") * 86400 + 0.5)
0278デフォルトの名無しさん
2012/09/17(月) 21:39:17.89ありがとうございます。
>>276
UNIXタイムスタンプという言葉を忘れていました。検索キーワードを変えてみます。
気に障ったみたいですいません。
0279デフォルトの名無しさん
2012/09/17(月) 21:44:58.98すみません。
こちらこそ言い過ぎました。
0280デフォルトの名無しさん
2012/09/17(月) 21:48:46.84>>264
xlLastCellって「使われた最後のセル」であって「データがあるセル」では無いのだが良いのか?
有効データがある最後のセルがほしいのならもう一工夫必要になる。
(一列だけが対象なら>>263で有効データがある最後のセルが得られる)
0281桃白白
2012/09/17(月) 21:50:35.120282デフォルトの名無しさん
2012/09/17(月) 22:00:45.02TAO
PAI
PAI
恐らくこのスレ内だけで生じているTPP問題
0283デフォルトの名無しさん
2012/09/18(火) 13:20:28.40A列限定だとして
Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).Select
昔はこんな回りくどいコード書くやつがいっぱいいたねぇ
Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)).Select
とできるんだが
A列と決まってなければFindメソッドで"*"を後ろから検索するのが普通
その時は変数を使うのが普通だ
0284デフォルトの名無しさん
2012/09/18(火) 13:22:02.25上は>>263向けね
0285デフォルトの名無しさん
2012/09/18(火) 13:37:02.88そんなめんどいことにならないように、range(hoge).currentregionで使用範囲を特定できる構成にするのがいいよ
0286デフォルトの名無しさん
2012/09/18(火) 18:08:11.65そのコードはレアケースで壱番下までデータで埋まってると失敗する
まあ現実的には下まで埋まる前にデータ大杉でExcelが無反応になると思うけど
0287デフォルトの名無しさん
2012/09/18(火) 18:44:29.30俺も>285に賛成だなぁ。
0288デフォルトの名無しさん
2012/09/18(火) 19:26:34.180289デフォルトの名無しさん
2012/09/18(火) 19:53:05.26挙句の果てには
>変数を使わず
に対し
>Findメソッドで
>変数を使うのが普通だ
なんだろうこの痛い奴・・
0290デフォルトの名無しさん
2012/09/18(火) 22:14:25.17A列にID、B列に数値が入っており、
IDと数値の関係は1対多になっています。
(A列には複数のIDデータが入っています。)
このデータで、各IDの最初の数値だけ必要であり、
それ以外の行を削除したいと考えています。
for nextで最終行からIDのマッチング、削除をする
VBAを組んだのですが、データ量が多すぎて
処理が時間がかかりすぎる状況です…
どなたか改善策のヒントをご教示いただければと思います。
0291デフォルトの名無しさん
2012/09/18(火) 22:33:03.90データが多いって、具体的には何件?
VBAなんか使わんでも重複の削除は簡単にできる
ttp://office.microsoft.com/ja-jp/excel-help/HA001034626.aspx
Office2007以降なら「重複データを削除」ってボタンがあるから、それクリックするだけ
どうしてもVBAでやる必要があるんなら、下からDictionaryに突っ込んでけば
自動的に先頭の数値だけが残るけど、とりあえず作ったコード晒してみ?ちょっとの手直しで
劇的にスピードアップする可能性もあるから
0292デフォルトの名無しさん
2012/09/18(火) 23:04:43.24アレンジ?
Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)の間違いを正しただけなんだが
Cells(Rows.Count, 1).End(xlUp)と同じだもんねぇ
いまどきこの程度が分からないやつはあまりいないけどな
>>286
知ってるよ
0293デフォルトの名無しさん
2012/09/18(火) 23:10:16.71Cells(Rows.Count, 1).End(xlUp)はアマチュアの書き方
Cells(Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1).Row, 1)と書くのがプロ
そんなプロはいねーよと言いたい人もいるだろうが実際にいた
0294デフォルトの名無しさん
2012/09/18(火) 23:15:29.03はい、IDが6万件あっても0.1秒で終わるよ
Sub Macro1()
Set dic = CreateObject("Scripting.Dictionary")
cel = Range("A1:B" & ActiveSheet.UsedRange.End(xlDown).Row).Value
For r = 1 To UBound(cel)
If Not dic.Exists(cel(r, 1)) Then dic.Add cel(r, 1), cel(r, 2)
Next
Columns("A:B").Clear
Key = dic.keys
itm = dic.items
For r = 1 To dic.Count
Cells(r, 1) = Key(r - 1)
Cells(r, 2) = itm(r - 1)
Next
End Sub
0295デフォルトの名無しさん
2012/09/19(水) 01:53:02.71具体的には、Aシートに氏名と来た日時が入っており(各人何回も来ているとする)、
Bシートには氏名と誕生日が入っています。
各人、誕生日の3日後以前に来た日のデータを削除したいのです。
どうかお知恵をお貸し下さい。
0296デフォルトの名無しさん
2012/09/19(水) 02:14:17.11=if(来場日<誕生日+3,"削除対象","")
とかじゃダメなの?
0297デフォルトの名無しさん
2012/09/19(水) 12:00:58.01Excel用に便利な関数みたいのを作れるだけで
それ以外に使うことって出来る?
0298デフォルトの名無しさん
2012/09/19(水) 12:20:59.81ゲームでもなんでも作れる
ttp://www.geocities.jp/excel_game/
0300デフォルトの名無しさん
2012/09/19(水) 13:13:00.40無理だと思う
VBに移植すれば単独起動も可能になるけど、Excelの機能を使ってる場合は
結局はExcelもインストールしとかないと動かない
0301デフォルトの名無しさん
2012/09/19(水) 13:40:46.54「Excel上以外」というのが、Excelを起動しないで、という意味なら、OLE経由で可能。
詳しくは"windows ole excel"で検索。
0302デフォルトの名無しさん
2012/09/19(水) 16:12:00.350303デフォルトの名無しさん
2012/09/19(水) 16:18:56.590304デフォルトの名無しさん
2012/09/19(水) 16:22:27.46タダだよ
0305デフォルトの名無しさん
2012/09/19(水) 16:27:09.500306デフォルトの名無しさん
2012/09/19(水) 16:28:19.15それが正解っぽい
0307デフォルトの名無しさん
2012/09/19(水) 16:40:08.460308デフォルトの名無しさん
2012/09/19(水) 16:46:19.940309デフォルトの名無しさん
2012/09/19(水) 18:47:07.540310デフォルトの名無しさん
2012/09/20(木) 00:52:24.10今更直せませんごめんなさいって開発チームが謝ってたろ
アップルも嫌がらせだけで外した訳じゃねーぞ半分ぐらいは
0311デフォルトの名無しさん
2012/09/20(木) 01:21:29.62そのうちデスクトップからも消えるのは時間の問題
っていうかスレチ
0312デフォルトの名無しさん
2012/09/21(金) 12:00:04.64というコードが、
実行時エラー '1004':
アプリケーション定義またはオブジェクト定義のエラーです。
と表示されてエラーになってしまいます。
変数自体はちゃんと認識されています。
何が間違っているのかご教示ください。お願いします。
0313デフォルトの名無しさん
2012/09/21(金) 13:09:08.30Dの後ろのスペース
0314デフォルトの名無しさん
2012/09/21(金) 13:13:49.42うわわ、本当だ…
ありがとうございました!
0315デフォルトの名無しさん
2012/09/21(金) 18:02:02.29下記、どうかお助けください><
現在、エクセルのマトリクス表をテーブルに変換する作業が必要となっており、
私の知識では対応できないため、皆様のお知恵をお借りできないでしょうか。
【イメージ】
(基データ)
ABC
1 121
2 222
3 32
↓↓↓
(変換後)
A1 1
A2 2
A3 3
B1 2
B2 2
B3 2
C1 1
C2 2
C3
※実際には、行・列とも1000近くあります。
良い方法がありましたら、ぜひご教示ください。
[エクセルのバージョン]
Excel2007
[OSのバージョン]
WindowsXP
0316デフォルトの名無しさん
2012/09/21(金) 18:25:45.90文字列の長さはlen(buf)
ループはfor i = 0 to len(buf) -1 ... loop
文字列のn文字目を1文字取得するのはmid$(buf, n, 1)
セルへの設定は、cell.value = hoge
0317デフォルトの名無しさん
2012/09/21(金) 18:26:59.88ttp://www.excel.studio-kazu.jp/kw/20120921172512.html
0318デフォルトの名無しさん
2012/09/23(日) 21:00:38.19Sub Tset()
cells(1,2) = CellValue(1, 1)
End Sub
Sub CellValue(address1 as Long, address2 as Long)
cells(address1, address2).value
このcells(address1, address2).value値が返るようにするにはどうしたらいいですか?
0319デフォルトの名無しさん
2012/09/23(日) 22:22:05.56Function プロシージャを使う
Function CellValue(address1 as Long, address2 as Long) As Variant
CellValue = cells(address1, address2).value
End Function
0320デフォルトの名無しさん
2012/09/24(月) 23:16:51.22でーたが入っている行の上に1行挿入したいのですがどうしたらいいでしょうか?
For i = 22 To 1 Step -1
If Len(Cells(i, 1).Text) >= 0 Then
Rows(i).Insert
End If
Next i
としてみましたが空白行が連続すると余分に挿入されてしまいます。
0321デフォルトの名無しさん
2012/09/24(月) 23:25:13.86If Len(Cells(i, 1).Text) >= 0 Then だと全行がTrueになるような・・・
If Not IsEmpty(Cells(i, 1)) Then にするとか
0322デフォルトの名無しさん
2012/09/24(月) 23:50:13.36ありがとう。
出来ました。
0323デフォルトの名無しさん
2012/09/25(火) 00:08:28.03Excel 2003
Excel起動時にPERSONAL.XLSからマクロを実行して時間指定、
指定時間になる度(10:00と11:30とか複数あり)に、
他のアプリケーションを実行していてExcelが隠れていてもExcelを表示させたい
要はタイマーにしたいのですがうまくいきません
Workbook.activateではうまくいかず、
CreateobjectならExcelの表示には出来ますが、新たに開いてしまいます
出来れば既に開いているPERSONAL.XLS(シートは非表示ですが)を表示させたいと考えています
どなたかググる際のキーワードでもいいので教えてください
0324デフォルトの名無しさん
2012/09/25(火) 00:11:15.49勘違いしてました。
For i = 22 To 1 Step -1
If Len(Cells(i, 1).Text) = 0 Then
Else
Rows(i).Insert
'i = i - 1
End If
Next i
で良かったんですね。
でもまた一つ勉強になりました。
0325デフォルトの名無しさん
2012/09/25(火) 00:38:37.25タイマーイベントを仕込みたいって事?
でも基本的にそういうスパンの長いものは
タスクスケジューラとかで実装するもんだと思う。
あと既存のExcel取得したい時はCreateObjectじゃなくてGetObject
という感じでキーワードを散りばめてみたがどうか
0326デフォルトの名無しさん
2012/09/25(火) 10:56:15.48「Excel 最前面」
SetWindowPos()かな?
0327デフォルトの名無しさん
2012/09/26(水) 06:21:43.61スーパー亀ですが実装再開します
VBAの新規画面に入力するとEndSubが必要と出るのですがどこが違うのでしょうか
0328デフォルトの名無しさん
2012/09/26(水) 06:54:19.74最初のSubの次の行に入れたらエラーなくなりました
しかしどうすれば動くのかわからない…
0330デフォルトの名無しさん
2012/09/26(水) 07:33:22.29うんともすんともです…orz
EndSubを2行目に入れるのはあってますか?
入れないとエラーが出ますが入れても動かないのです
0332デフォルトの名無しさん
2012/09/26(水) 08:27:54.95マクロにコピペしていたのでSub test()とかなっちゃってました
新規VBAとして書き込んだらできました
ありがとうございます!
0333デフォルトの名無しさん
2012/09/26(水) 08:40:26.44何度もごめんなさい…
これって一度動かしたら、動かした後のシートに対して同じ動作はできませんか?
0334デフォルトの名無しさん
2012/09/26(水) 08:54:01.61あ、3行目だけに有効だとわかりました
全行で同じ事やりたいので何とかならないか考えてみます
0335デフォルトの名無しさん
2012/09/26(水) 10:12:27.14関連度がさ・し・す についてしか定義されてないんだから
他の文字では何も起こらないだけでは?
0336デフォルトの名無しさん
2012/09/26(水) 10:45:38.07わお
自分ばかすぎでした逝ってきます
助かりましたありがとうございました
0337デフォルトの名無しさん
2012/09/26(水) 17:05:02.73コレクションで下記コードで実行した場合どうも上手くいきません。
For i = 2 To Range("A1").CurrentRegion.Rows.Count - 1
With vArray
.Add Item:=Cells(i, 1)
.Add Item:=Cells(i + 1, 1)
.Add Item:=Cells(i + 2, 1)
.Add Item:=Cells(i + 3, 1)
.Add Item:=Cells(i + 4, 1)
End With
dateArray.Add Item:=vArray
Next i
0338デフォルトの名無しさん
2012/09/26(水) 17:07:20.300339デフォルトの名無しさん
2012/09/26(水) 17:09:44.40その最初と最後の行のrowsを取得したいのですが、
for nextを使わずに処理する方法があればご教示下さい。
よろしくお願いします。
0340デフォルトの名無しさん
2012/09/26(水) 17:13:32.88めんどくせぇ。
vArrayって何なんだよ。
実行したらどの行でどんなエラーになるんだよ。
0341デフォルトの名無しさん
2012/09/26(水) 17:33:58.080342デフォルトの名無しさん
2012/09/26(水) 17:51:18.70・ソース貼るなら端折るな
・どう上手くいかないのか具体的に書け
・上手くいかないミニマムコードを書いて貼れ
0343デフォルトの名無しさん
2012/09/26(水) 18:15:40.36あとJoin()ってなんだよ?
0344337
2012/09/26(水) 20:10:33.75今ミニマムコードで試したら
Dim dArray As New Collection
With bArray
.Add Item:=Cells(1, 1)
.Add Item:=Cells(2, 1)
End With
Debug.Print Join(bArray)
どうやらコレクションではjoinは使えないようです。
0345デフォルトの名無しさん
2012/09/26(水) 20:40:14.620346デフォルトの名無しさん
2012/09/26(水) 20:44:15.510347デフォルトの名無しさん
2012/09/26(水) 20:48:01.54ttp://www.eurus.dti.ne.jp/yoneyama/Excel/vba/vba_find.html
0348デフォルトの名無しさん
2012/09/26(水) 21:53:39.57質問内容が変わっちゃったの?
とりあえず Option Explicit 書いてみたら?
0349デフォルトの名無しさん
2012/09/27(木) 00:02:02.75どうやらっておまえ・・・・
F1くらい押せよ
0350デフォルトの名無しさん
2012/09/27(木) 00:03:14.410351デフォルトの名無しさん
2012/09/27(木) 00:32:35.830352デフォルトの名無しさん
2012/09/27(木) 00:58:40.29何がやりたくて何で躓いてるのかよくわからないけど
もしかしてUnion使ったら解決するとか
0353デフォルトの名無しさん
2012/09/27(木) 01:06:05.11総売り上げから人件費%経費%など円グラフにするにはどうすればいいですか?
総売り上げが100%です。
宜しくお願いします。
0354デフォルトの名無しさん
2012/09/27(木) 01:15:54.75>わからなければとりあえず「マクロの記録」(Alt, T, M, R)
質問内容が伝わってこないので、もう少し具体的に質問してください
何がやりたくて、現状どんなソースコードを書いていて、どこでどのように行き詰っているのか、とか
丸投げしたいならせめて入力情報と現状のソースが入力されたブックをアップしてください
0355デフォルトの名無しさん
2012/09/27(木) 09:44:37.81マクロ実行中に手動で他のブックを開くようにするには
どういった記述を追加すればよいですか?
マクロ実行中に手動で他のブックを開くことができません。
マクロ実行前に他ブックを開いておけば、編集作業はできます。
実行時間が1時間近くなるので困っています。
0356デフォルトの名無しさん
2012/09/27(木) 10:46:16.21実行しているマクロの所々にDoEventsを入れる。
所々というのは、Loop行の前とか、関数呼び出し後とか適当に。
0357デフォルトの名無しさん
2012/09/27(木) 11:15:05.08力業だけど別プロセスでExcelをもう1個起動して作業するという手もあるよ
0358デフォルトの名無しさん
2012/09/27(木) 18:19:05.68OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
これだと開くファイルを自分で選べるけど
0359デフォルトの名無しさん
2012/09/27(木) 18:26:10.080360デフォルトの名無しさん
2012/09/27(木) 19:30:16.73いまどきのPCなんて大概マルチスレッド対応なんだから
Excel実行中に別の事したって問題ないでしょ
0361デフォルトの名無しさん
2012/09/27(木) 20:32:50.52nowrow、maxrowは変数で、resultシートの現在の値を検索値とし、
sheet1の2行目から最終行までの範囲で検索し、その4列目の数値を
変数kaiとして求める式です。
kai = Application.WorksheetFunction.VLookup(Worksheets("result").Range("A" & nowrow), Worksheets("sheet1").Range("A2:A" & maxrow), 4, False)
ヒントをください。
どうかよろしくお願いします。
0362361
2012/09/27(木) 21:06:19.33自己解決しました。
0363デフォルトの名無しさん
2012/09/27(木) 21:22:24.08もしかして
"result"
ここか?
0364デフォルトの名無しさん
2012/09/27(木) 21:27:15.174列目だと?
0365デフォルトの名無しさん
2012/09/27(木) 21:29:08.09Excelのある内容をグラフ化してそのグラフをJPGとして
デスクトップに保存したいのですが
なんとなく
VBAでワークシートにグラフを作成
↓
そのグラフをアクセサリのペイントに張り付け
↓
JGP形式でデスクトップに保存
を自動でするみたいなのを想像していますが
もっと簡単なやり方とかあるのでしょうか?
上記の方法だとペイントがある事が前提とかマシンに依存しすぎなので避けたいです
0366デフォルトの名無しさん
2012/09/27(木) 21:37:11.67excel vba グラフ 画像 保存
とかでググる
0367デフォルトの名無しさん
2012/09/27(木) 22:41:16.75所々にいれてはあるのですが、なかなか起動しですね
>>357、>>358
いいアイデアもらえました。実現できそうです
>>359
webアクセス→テキスト整形、貼付なので負荷は重くないです
0368359
2012/09/27(木) 23:09:06.42負荷的なことを言ってるんじゃなくて別の作業することでPCがフリーズしたりとかすると
また最初からマクロ実行しなおしになって時間がかかるなと思っただけ
あんま気にしないで
0369デフォルトの名無しさん
2012/09/27(木) 23:19:08.89Sheet1にA列B列C列の3列でできた表があって、C列の数値が10以上ならSheet2にA列B列を表示させたいのですが
関数で表示させるとしたら、どういう関数式になりますか?
0370デフォルトの名無しさん
2012/09/27(木) 23:25:53.670371デフォルトの名無しさん
2012/09/27(木) 23:30:44.080372デフォルトの名無しさん
2012/09/27(木) 23:32:28.97http://toro.2ch.net/test/read.cgi/bsoft/1346498940/
0373桃白白
2012/09/27(木) 23:35:13.97ちんちんもみもみしてくれませんかみたいな
Excel総合相談所 105
http://toro.2ch.net/test/read.cgi/bsoft/1346498940/
0375デフォルトの名無しさん
2012/09/27(木) 23:42:21.550377デフォルトの名無しさん
2012/09/28(金) 09:00:36.88Excelの期限はもう切れたのか?
0379デフォルトの名無しさん
2012/09/28(金) 09:52:22.65PCリカバリで体験版の使用歴リセットできるよ
0380デフォルトの名無しさん
2012/09/28(金) 10:48:52.04ネット解約してその金でExcel買え
みんなハッピーになれる
0381デフォルトの名無しさん
2012/09/28(金) 12:47:40.12アレ使え。
0382デフォルトの名無しさん
2012/09/28(金) 13:02:54.960383デフォルトの名無しさん
2012/09/28(金) 14:49:45.36あと、VBならゴニョゴニョ……
0384デフォルトの名無しさん
2012/09/28(金) 15:42:09.3910万円以上するんじゃなかったか?
ゴニョゴニョとはどういうことか教えれ。
0385デフォルトの名無しさん
2012/09/28(金) 15:44:16.93てかお前の知ってるVBは死んだ。
0386デフォルトの名無しさん
2012/09/28(金) 18:01:42.470387デフォルトの名無しさん
2012/09/28(金) 18:14:59.980388デフォルトの名無しさん
2012/09/28(金) 22:06:24.010389デフォルトの名無しさん
2012/10/01(月) 10:38:11.30VBA本で有名なこの人ですが
http://www.amazon.co.jp/立山-秀利/e/B004LA5SL6/
自分の写真を公開してるということは、自分のことをハンサムで男前でカッコいい部類に入ると思っているからなんでしょうか?
0390デフォルトの名無しさん
2012/10/01(月) 10:55:39.940392デフォルトの名無しさん
2012/10/01(月) 11:21:04.19写真うp
0393桃白白
2012/10/01(月) 11:35:01.94http://pic.prepics-cdn.com/shomaru/17166204.jpeg
0394デフォルトの名無しさん
2012/10/01(月) 12:16:32.170395デフォルトの名無しさん
2012/10/01(月) 20:46:03.540396桃白白
2012/10/01(月) 20:59:25.28桃白白の家庭では小さいころから桃白白と書かかれた紙を持って写真に撮られたら魂抜かれると
教わって育てられる、都市伝説かもしれないけど、迷信かもしれないけど、桃白白は昔の人が
代々語り継いできた言葉を大事にしたい、だからそれは無理だけど、イケメンだろ? ほれるだろ? お前はもう桃白白にほれている
0397デフォルトの名無しさん
2012/10/01(月) 21:04:21.37ExcelVBAと書いた紙を持って撮って
0398デフォルトの名無しさん
2012/10/01(月) 21:10:16.230399323
2012/10/01(月) 21:12:08.48遅くなりましたがレスありがとうございました
できました!と書きたかったのですが、
まだ時間がかかりそうです
単純なウィンドウ操作だけではうまくいかない感じで、
APIのスレッドIDとかプロセスIDとか勉強してみようと思います
0400デフォルトの名無しさん
2012/10/01(月) 21:16:10.15画面をとにかく最前面に出すってのなら、SetWindowPosを使った例がExcel VBA 裏ワザ大辞典って本に載ってる
0401デフォルトの名無しさん
2012/10/01(月) 21:50:16.27うまくいくときもあれば、そうじゃない時もあって
幸い仕事も暇なので、色々勉強します
0402デフォルトの名無しさん
2012/10/02(火) 20:04:04.69リアルタイムで進まず、ボタンを押したら2012/10/02 20:10
みたいな感じで表示したいんですが
0403デフォルトの名無しさん
2012/10/02(火) 20:40:33.92=NOW()+"00:03"
0404デフォルトの名無しさん
2012/10/02(火) 21:05:15.41TextBox1.Text = Format(Now() + TimeValue("00:03"), "yyyy/mm/dd hh:mm")
0405デフォルトの名無しさん
2012/10/03(水) 00:44:34.23あんまり上手くいかないようならExcel以外の手も組み合わせると良いと思うよ
このスレ的には反則だけどもExcelオンリーじゃなきゃダメってんでもないんでしょ?
勉強なら良いけど、仕事なら手を狭めるのは損だ。
0406デフォルトの名無しさん
2012/10/04(木) 19:30:44.92クリアボタンを押したとき、初期の入力画面に戻したいのですが
やり方教えてもらえると助かります
お願いいたします
0407デフォルトの名無しさん
2012/10/04(木) 21:20:14.35その「クリアボタン」って何?
コマンドボタンかなんかですか?
「初期の入力画面」てのも
どういう状態が初期なのか分かりません。
もう少し詳しく説明してください。
0408デフォルトの名無しさん
2012/10/04(木) 21:28:38.16失礼しました。
自分でボタンを作って、そのボタンを押すと、テキストボックス1番から6番に入ってるテキスト情報を削除し、
尚且つ、チェックボックスでチェックが入ってる場合、それをチェックなしの状態にしたいと思ったんですが。
やり方がわからないのでアドバイスいただけると幸いです。
0409デフォルトの名無しさん
2012/10/04(木) 21:40:34.57Workbooks.Open "C:\aaa"
'あああシートを選択する
Sheets("あああ").Select
こういう処理があるのですが
どうもファイルをオープンする前にシートを選択する処理が走っていて
当然まだファイルが開く前だからそんなものは無いって言われて
落ちてしまいます
確実にファイルが開いてから次の処理に進ませるために
これって対応する場合どういうのがいいのでしょうか?
0410デフォルトの名無しさん
2012/10/04(木) 21:46:33.26Private Sub CommandButton1_Click()
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
CheckBox1.Value = False
CheckBox2.Value = False
End Sub
0411デフォルトの名無しさん
2012/10/04(木) 21:54:00.02そうじゃなくて、for i=1 to 6みたいな使って行を減らしたいの
0412デフォルトの名無しさん
2012/10/04(木) 21:58:29.36メリットがないのでやめた方がいい
0413デフォルトの名無しさん
2012/10/04(木) 22:00:04.21Private Sub CommandButton1_Click()
For Each c In Controls
If Left(c.Name, 7) = "TextBox" Then c.Text = ""
If Left(c.Name, 8) = "CheckBox" Then c.Value = False
Next
End Sub
0414デフォルトの名無しさん
2012/10/04(木) 22:03:28.62たった2個じゃ一行も減らない
Private Sub CommandButton1_Click()
For i = 1 To 6
Controls("TextBox" & i).Text = ""
Next
End Sub
0415デフォルトの名無しさん
2012/10/04(木) 22:12:20.06実際書いてみたら何か読み辛いなあ、で結局元のコードに戻す。
未だにこのパターンで時間を無駄にしてしまう事があるなw
0416デフォルトの名無しさん
2012/10/04(木) 22:43:35.80テキストボックスのクリアは出来た。ひとまずありがとう。でも
CheckBox1.Value = False
CheckBox2.Value = False
これなんか違うmちあい。Valueじゃないってエラーメッセージが出る。下の2つがチェックボックス1と2なんだけど
もしかしてバージョン違うのかな?
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
End Sub
Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
End Sub
0417デフォルトの名無しさん
2012/10/04(木) 23:17:46.41これで分割されてspの中に配列としてaaa、bbb,cccが入れられるのですが
sp = split("aaa,bbb,ccc",",")
sp = split("eee,fff,ggg",",")
みたいに一回目に分割させた配列の中に2回目に分割した内容を
追記するような方法ってあるのでしょうか?
0418デフォルトの名無しさん
2012/10/04(木) 23:23:25.230419デフォルトの名無しさん
2012/10/04(木) 23:26:07.72str = "aaa,bbb,ccc" & "," & "eee,fff,ggg")
sp = split(str , ",")
0420デフォルトの名無しさん
2012/10/05(金) 22:35:49.44だとRengeの内容がarrayに格納されるのですが
メソッド化して、arrayという変数を引数にして使いたい場合
call aaa(array)
funcion aaa(s1 As Object)
s1 = Range("A1:C10000)
end function
だとうまくいきません
ご教授ください
0421デフォルトの名無しさん
2012/10/05(金) 22:42:26.83そもそも値を返さないならfunctionである必要がない
0422デフォルトの名無しさん
2012/10/05(金) 22:49:23.110423デフォルトの名無しさん
2012/10/05(金) 23:36:45.93Sub aaa(ByRef s1)
s1 = Range("A1:C10000")
End Sub
0424デフォルトの名無しさん
2012/10/06(土) 01:32:05.42コードを書いたら下がりますか?いい解決方法を教えてください。
0425デフォルトの名無しさん
2012/10/06(土) 01:46:45.38連休中に水しか飲まずにコーディングすれば下がると思うよ
0426デフォルトの名無しさん
2012/10/06(土) 10:27:02.620427デフォルトの名無しさん
2012/10/06(土) 19:37:58.740428デフォルトの名無しさん
2012/10/08(月) 12:46:05.92最後にたまに半角スペースが入っちゃうことがあって
最後の半角スペースをトリミングする方法ってありますか?
0429デフォルトの名無しさん
2012/10/08(月) 12:53:25.37http://note.phyllo.net/?eid=1106073
0430デフォルトの名無しさん
2012/10/08(月) 12:55:20.71RTrim
0431デフォルトの名無しさん
2012/10/08(月) 22:46:03.15これでいい?
0432デフォルトの名無しさん
2012/10/09(火) 00:41:31.370433桃白白
2012/10/09(火) 08:07:03.29__
//:\
/ /::::::::\
/ /:::::::::::::::\
/ . /:::::::::::::::::::::::\
/ /::::::::::::::::::::::::::::::::\
/ . /:::::::::::::::::::::::::::::::::::::::::\
/ /:::::::::::::::::::::::::::::::::::::::::::::::::\ ____
/ /:::::::::::::::::::::::::::::::::::::::::::::::::: / ― -\
. /::::::::::::::::::::::::::::::::::::::::::::::::: / (●) (●) 暇だお
/::::::::::::::::::::::::::::::::::::::::::::::: / (__人__) \
/::::::::::::::::::::::::::::::::::::::::::::::::: | ` ⌒´ |
. /::::::::::::::::::::::::::::::::::::::::::::::::::::: \ /
ノ \
/´ ヽ
r──| l \
/ ̄ ̄ ̄ヽ -一''''''"~~``'ー--、 -一'''''''ー-、.
/  ̄ ̄  ̄ ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
0434デフォルトの名無しさん
2012/10/09(火) 11:34:08.96上手く出来ません。(文字色なら変更できた)
どなたか、ヒントを頂けないでしょうか?
Function Test()
Dim MyCell As String
MyCell = Application.ThisCell.Address(False, False, xlA1)
Range(MyCell).Interior.ColorIndex = 3
' Range(MyCell).Font.ColorIndex = 3
Test = MyCell
End Function
0435デフォルトの名無しさん
2012/10/09(火) 12:07:53.13スタートと出口をそれぞれ左上、右下にし、
必ず出口に行けるルートは一つだけで、
その他は壁をつくり、その壁は罫線で表したいです。
こういうプログラムをつくるにあたり、アルゴリズムはどうすればいいでしょうか?
できるだけくわしく教えてください
0436デフォルトの名無しさん
2012/10/09(火) 12:44:15.63できません。
>>435
VBAと関係無いよ。
0437434
2012/10/09(火) 13:01:09.36さんざん頭を悩ませたのに……
ありがとう、おかげで諦めがついたよ
0438デフォルトの名無しさん
2012/10/09(火) 13:20:35.520439デフォルトの名無しさん
2012/10/09(火) 14:05:18.52SelectionChangeとかで
0440434
2012/10/09(火) 14:45:56.12ただ、VBA初心者な自分には説明眺めても使い方がチンプンカンプンなので、
勉強しなおしてきます。 サンクスです。
0441デフォルトの名無しさん
2012/10/09(火) 19:30:59.40Range("C4", "D100") = s2
配列を使って、これでA4:B100のデータをC4:D100にコピペできますが
元の文字が赤とかセルの色が黄色とかは引き継ぎません
これを書式を含めて完全な状態でコピーしたい場合どうすればいいのでしょうあ?
0442デフォルトの名無しさん
2012/10/09(火) 19:48:49.48Pastespecial
0443デフォルトの名無しさん
2012/10/09(火) 20:54:08.30コピーペーストではそれで可能だが
配列の代入では使えないのでは?
0444デフォルトの名無しさん
2012/10/09(火) 21:34:27.37Variant変数を用いる手法ではセルの値だけしか受け渡しされない。
だから書式なども含めてコピーしたいときにはこの方法は使えない。
0445デフォルトの名無しさん
2012/10/09(火) 22:28:54.53レベルはど素人並ですが、頑張ってみたいプログラムを書いてみようと思い質問させていただきます。
まず1〜5のブックに
A1に入力された日付のデータを
A2〜C6に落とす
というボタン(A)が組まれています
日付入力はブック毎に手入力だったのですが、
新規ブック(以下Aブック)を作りそこに連動して一括で日付変更できるまでは行きました。
(スライムを倒した程度のレベルです)
次に
同じようにボタン(A)もブック毎に押してデータを落としていたのですが
Aブックにボタンを設置し、そのボタンを押せば1〜5のブックのボタンが一発で押されるようにしたいです。
いろいろ調べては見ましたが知恵足らずで手詰まり状態です。
よろしくお願いします
0446デフォルトの名無しさん
2012/10/09(火) 22:38:49.53落とすって意味が理解できないけど
他のブックのマクロを実行したいってこと?ならそれでググれば答えが見つかる
0447デフォルトの名無しさん
2012/10/09(火) 23:32:42.51ありがとうございます。
試しにやってみたところ「オブジェクトが必要です」みたいなエラーが出ました
Book1のAを実行すればBook2のBが実行されるが狙いで
書いた内容は
Book1に
Sub A()
Application.Run "Book2!B"
End Sub
です
0448デフォルトの名無しさん
2012/10/09(火) 23:54:52.15現在Book1でA実行すればBook2のBがBook1で実行される状態です
狙いとしてはBook2のBをBook1のAで実行です
VBA謎すぎて熱が出そうです・・・
0449デフォルトの名無しさん
2012/10/10(水) 00:31:28.07何とか出来ました。
0450デフォルトの名無しさん
2012/10/10(水) 01:17:59.55この問題て良く使われるん?
なんかあちこちで見た覚えが
0451デフォルトの名無しさん
2012/10/10(水) 02:04:12.99フカシギの数え方という元ネタから動画サイトなどでかなり有名になった。
ほのぼのと思いきや、シリアスな内容が入ってたりとか。
0452デフォルトの名無しさん
2012/10/10(水) 07:49:50.06PC-8001mkIIのデモプログラムにも入っていたのを思い出した。
数当てゲームのような、伝統的な練習問題になってるんだろうな。
0453デフォルトの名無しさん
2012/10/10(水) 07:51:57.81ttp://www.youtube.com/watch?v=0hlixJsRLso
0454デフォルトの名無しさん
2012/10/10(水) 08:42:56.100455デフォルトの名無しさん
2012/10/10(水) 11:31:14.11解答するプログラムが良いな
0456デフォルトの名無しさん
2012/10/10(水) 11:51:51.66YouTubeは変わったのか?
実にみにくい。
画面が小さすぎるままか、最大化にするか、どちらかしかないから
小さいのは見にくいし、最大化にすると他のWindow見たり他の作業ができない。
実に困る。
0457デフォルトの名無しさん
2012/10/10(水) 12:22:06.59すでにある
「マスターマインド」でぐぐれ
0459デフォルトの名無しさん
2012/10/10(水) 13:19:51.02残念。
ルールが違う。
0460デフォルトの名無しさん
2012/10/10(水) 15:47:07.53http://chaichan.lolipop.jp/perlnote/perlnote2007-11-182.htm
0461デフォルトの名無しさん
2012/10/11(木) 17:13:01.25どなたかヒントをお願いできないでしょうか?お願いいたします
Sub タイマー()
endtime = Timer + Range("C1") * 60 + Range("E1")
Do
pt = Timer
Range("C1") = (endtime - pt) \ 60
Range("E1") = (endtime - pt) Mod 60
Loop Until endtimes - pt <= 0
MsgBox "時間切れです"
End Sub
0463デフォルトの名無しさん
2012/10/11(木) 18:10:30.76ちなみに、そのやり方はビジーループと言って、どのプログラミング言語でもやってはいけない方法。
VBAでタイマーを使いたいなら、Application.OnTimeを使うべし。
0464デフォルトの名無しさん
2012/10/11(木) 18:15:27.22ヒント1 「シリアル値」
ヒント2 「Option Explicit」
ヒント3 「DoEvents」
Option Explicit
Sub タイマー()
Dim endtime, pt
endtime = Time * 86400 + Range("C1") * 60 + Range("E1")
Do
pt = Time * 86400
Range("C1") = (endtime - pt) \ 60
Range("E1") = (endtime - pt) Mod 60
DoEvents
Loop Until endtime - pt <= 0
MsgBox "時間切れです"
End Sub
0465デフォルトの名無しさん
2012/10/11(木) 18:17:10.77よく見ろ
途中経過をセルに出したいんだよ
あとOnTimeだと秒以下が切り捨てられる
0466デフォルトの名無しさん
2012/10/11(木) 18:56:59.15おかげで解決しましたありがとうございます
お手を煩わせてしまいまして申し訳ありません
0467デフォルトの名無しさん
2012/10/11(木) 23:15:08.83As string*16とかの
*16ってどういう意味ですか?
ググッてみたけど全文英語とかでわかりません;;
0468デフォルトの名無しさん
2012/10/11(木) 23:19:49.30*16=16文字までってことでおkですか?
0469デフォルトの名無しさん
2012/10/11(木) 23:25:10.01質問内容中の「As string」でググったら答えがヒットするんだけど
一体どんなワードでググってるの?
0470デフォルトの名無しさん
2012/10/11(木) 23:26:40.91○ 16文字
× 16文字まで
16文字以外の文字列は入れることができない
短い文字列には自動的にスペースが足されて16文字になる
長いと勝手に切り捨てられる
0471デフォルトの名無しさん
2012/10/11(木) 23:29:34.8616文字の固定長文字列
16文字までじゃなくて、常に16文字の文字列
0472デフォルトの名無しさん
2012/10/12(金) 00:14:06.27>>471
わかり易い説明感謝します!
>>469
As string*でググってました・・・
ほんとど素人で恥ずかしいです
i=とかも良くわからなくて@@
さらに質問なんですが
"12/"&Format(Cells(3,"A").Value,"00")&"/"&Format(Cells(3,"B").Value,"00"
これがあったとして
日付だけB3に入れたい時ってFormat(Cells(3,"B").Value,"00"ここだけ残せばいいんでしょうか?
0473デフォルトの名無しさん
2012/10/12(金) 00:59:35.330474デフォルトの名無しさん
2012/10/12(金) 11:04:56.15> 途中経過をセルに出したいんだよ
OnTimeでも出せるよ。
> あとOnTimeだと秒以下が切り捨てられる
そんな厳密なタイマー使いたいなら、別の方法をとった方がいいね。
ビジーループは糞。
0475デフォルトの名無しさん
2012/10/12(金) 11:59:45.98これを防ぐ良い方法はありませんかな?
0476デフォルトの名無しさん
2012/10/12(金) 12:09:26.410477デフォルトの名無しさん
2012/10/12(金) 12:15:09.66したまえ。
0478デフォルトの名無しさん
2012/10/12(金) 12:24:55.600479デフォルトの名無しさん
2012/10/12(金) 13:10:27.20そんな動きしないけど、具体的にどんなデータとどんなコードで発生するの?
0480デフォルトの名無しさん
2012/10/12(金) 17:41:04.54[データ]
項目1
うんこ
しっち
ちんこ
まんこ
うんこカレー
[抽出条件]
項目1
うんこ
[結果]
うんこ
うんこカレー
0481デフォルトの名無しさん
2012/10/12(金) 22:31:56.12A1:A100までを配列に格納、ただしその中で「AAA」という文字は格納しない
ってやりたいですが。
0482デフォルトの名無しさん
2012/10/12(金) 22:47:32.42配列にまとめて格納した後、
配列を全検索して「AAA」以外を別の配列に
入れなおせばいい。
もしくはfilter関数を使えば
指定された文字列を除いた配列が得られる。
0483デフォルトの名無しさん
2012/10/13(土) 00:26:57.82ググってもORしか出てこない(´・ω・`)
0484デフォルトの名無しさん
2012/10/13(土) 01:03:29.65[抽出条件]
項目1
="=うんこ"
0485デフォルトの名無しさん
2012/10/13(土) 01:08:09.18AND でやってみた?
0486デフォルトの名無しさん
2012/10/13(土) 01:08:22.73例えばどんなことがしたいの?
0487桃白白
2012/10/13(土) 01:48:33.04桃白白ならこう書くけど?
Dim num1 As Long
Dim num2 As Long
num1 = 1
num2 = 2
Select Case num1
Case 1
Select Case num2
Case 2
MsgBox "たおぱいぱい"
End Select
End Select
0488デフォルトの名無しさん
2012/10/13(土) 02:11:52.86お仕事でVBA使用している方ですか?
0490デフォルトの名無しさん
2012/10/13(土) 02:23:24.17使用してないのにそこまで書けるのですか?
すごいです・・・
0492デフォルトの名無しさん
2012/10/13(土) 03:09:55.39select case で判定する変数は1つだからandは必要ないと思うよ。
比較するものが2つ以上ないとandは意味ないよね?
0493デフォルトの名無しさん
2012/10/13(土) 04:41:01.99Select Case True って使い方知ってるか?
0494デフォルトの名無しさん
2012/10/13(土) 07:51:27.23Case (VarType(var) = vbString And var = "123")
MsgBox "String-123"
End Select
ElseIfまんどくせな人には良いのかもしれんね。
0495483
2012/10/13(土) 07:54:53.42どういうふうにANDを付けるの想像できませんでした
>>486
A1セルに「あ、い」のいずれかが最初にあり
さらに「う」が最後に入ってる時に処理をしたいみたいな感じです
Option Explicit
Sub a()
Select Case Left(Range("A1"), 1)
Case "あ", "い": If Right(Range("A1"), 1) = "う" Then Range("A2") = 1
End Select
End Sub
こういうふうになるのはわかるのですが
こんな条件ならまとめて一つの条件にできないかなと思いまして質問させていただきました
0496デフォルトの名無しさん
2012/10/13(土) 08:23:55.690497デフォルトの名無しさん
2012/10/13(土) 10:46:14.40本じゃないけどMSDNライブラリ嫁
0498デフォルトの名無しさん
2012/10/13(土) 10:52:16.13Select Case (Left(Range("A1"), 1) & Right(Range("A1"), 1))
Case "あう", "いう"
Range("A2") = 1
End Select
0500デフォルトの名無しさん
2012/10/13(土) 11:24:59.59&は連結演算子ですよ…
0501デフォルトの名無しさん
2012/10/13(土) 11:38:32.16それ、文字列くっつけてる。。。
0502デフォルトの名無しさん
2012/10/13(土) 11:46:19.14知らなかった。勉強になったよ。
他人のソース見ることが多いんだけど、その書き方はif文に直したい。
0503デフォルトの名無しさん
2012/10/13(土) 12:46:52.56For n1 = 1 To 4
For n2 = 1 To 4
For n3 = 1 To 4
・
・
といった形で変数nxそれぞれでフォーループをまわし、
AAA = n1 & n2 & n3 & n4 & n5 ・・・
にて
11111・・・11
11111・・・12
11111・・・13
11111・・・14
11111・・・21
といったx文字の数字を総当りで取るイメージな物を必要としているのですが、
例えばその桁が100であったり50であったり、任意の値によって
For n1 = 1 To 4
For n2 = 1 To 4
For n3 = 1 To 4
・
・
For n100 = 1 To 4
もしくは
For n50 = 1 To 4
のように、For loopで使うnxの変数も指定したいのですが
どうすればいいでしょうか?
For 桁 = 1 to 100
For n & 桁 = 1 to 4
next 桁
見たいな事ができればいいのですが。
0504503
2012/10/13(土) 12:47:49.91自分の知識が足りず、升目の数によって大量のFor loopを書き、
升目分だけsubを作成していく事しかでき無かったためです。
質問している側がエスパーを要するような内容と感じてしまう内容で申し訳ないです。
0505デフォルトの名無しさん
2012/10/13(土) 14:20:49.07よくわからんけど配列使えば解決する?
0507デフォルトの名無しさん
2012/10/13(土) 17:29:09.05指定した一つのセルの数値を返す場合はINDEXを使えば良いんですか?
0508デフォルトの名無しさん
2012/10/13(土) 17:35:26.94indexはセルを指定するために必要なものであって
数値を返すためのものじゃない
0509デフォルトの名無しさん
2012/10/13(土) 17:50:50.62なるほど・・・
わかりやすくいうと
i = ("d4")といった形でiに数値を代入したいのです。
教えていただけないでしょうか?
0510デフォルトの名無しさん
2012/10/13(土) 18:38:54.11i = 0
with thisworkbook.worksheets("sheet1")
if isnumeric(.range("d1")) then
i = .range("d1")
end if
end with
0511デフォルトの名無しさん
2012/10/13(土) 18:57:29.18ありがとうございます。
ということは、そのままそっくり代入できる関数は無いということみたいですね。
精進します。
0512511
2012/10/13(土) 19:19:21.73i = Range("d4").Value
で良かったみたいです。
難しく考えすぎてました。
0513デフォルトの名無しさん
2012/10/13(土) 21:12:51.68iCloudのメモ帳と同期化させたいのですが
こんなのって可能でしょうか?
もちろんネット接続している状態です
0514デフォルトの名無しさん
2012/10/13(土) 22:14:39.300515デフォルトの名無しさん
2012/10/14(日) 03:05:16.770516デフォルトの名無しさん
2012/10/15(月) 10:06:37.37変更することができるけど、シートに貼り付けるボタンのサイズを変更しようと
する場合はどうするんですかね
(http://uni.2ch.net/test/read.cgi/operatex/1345250215/878代行)
0517デフォルトの名無しさん
2012/10/15(月) 10:33:06.72>>1
>★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
0518デフォルトの名無しさん
2012/10/15(月) 18:17:48.43ボタンを右クリックからコントロールの書式設定で
サイズを変更はできましたが、マクロの記録でやっても
それは出てきませんでしたが
今回はコントロールの書式設定で変更できたんでこれでよしと
しておきます
(http://uni.2ch.net/test/read.cgi/operatex/1345250215/881代行)
0519デフォルトの名無しさん
2012/10/15(月) 20:53:03.93どうすればいいのでしょうか?
たとえばA4:J3の場合はrange("A4:J3").valueみたいな感じで
0520デフォルトの名無しさん
2012/10/15(月) 21:06:50.30Selection.Value
0521デフォルトの名無しさん
2012/10/19(金) 00:54:43.03A1からA10まで連続でネットのURLリンクがある場合
それをまとめてリンク先のホームページを開く
ですが
マクロ記録でそれをやってもセルがselectされるだけでリンク押下まではしてくれません。
教えて下しあ
0522デフォルトの名無しさん
2012/10/19(金) 01:05:59.16http://officetanaka.net/excel/vba/tips/tips42.htm
ここらに数パターン乗ってたよ
0523デフォルトの名無しさん
2012/10/19(金) 03:15:26.49If Worksheets("Sheet1").Cells(row, 1) < DATE(2010,07,01) Then〜
という記述では認識されません。
どのように記述すれば良いか、アドバイスをお願いいたします。
0524デフォルトの名無しさん
2012/10/19(金) 03:33:26.26If Cells(r, 1) < DateValue("2010/07/01") Then
RowとDateは予約されているので変数名などに使わない方がいい
0525桃白白
2012/10/20(土) 09:56:57.73選択範囲をhtmlのtableタグに変換したいのですが結合セルの
処理の仕方がわかりません。
http://uploda.cc/img/img5081f58e1bb33.png
画像のように選択したセルから
<table>
<tr><td colspan="2">1</td><td rowspan="2">2</td></tr>
<tr><td>3</td><td>4</td></tr>
</table>
このような文字列を作りたいです。どうやったらいいですか、教えてください。
桃白白困ってます、教えてくださいお願いします。
0526デフォルトの名無しさん
2012/10/20(土) 10:15:59.85でググれば
0527桃白白
2012/10/20(土) 21:22:54.05なんか冷たくない?結婚生活送ってて最近ご無沙汰じゃない?って嫁に聞いたら
風俗行ってくれば?と言われたような、どうしてもっていうんならあたしが
マットプレイしてあげてもいいけど?と言ってくれるかわいい嫁が欲しいです。
桃白白はそういう結婚生活を送りたいです。桃白白はいまそういう心境です。
vba cells 結合 検出でググったらMergeCellsとMergeAreaを使っちゃいな的な
ページがありましたのでMergeCellsとMergeAreaを使ってみちゃいたいと思います。ありがとうございます。
0528デフォルトの名無しさん
2012/10/20(土) 22:36:13.28Excelどーなったの?
2000だったらあまってるのあげてもいーけどw
0529526
2012/10/20(土) 22:51:03.49なんだかんだいってお礼はしてくれるのね・・(笑)
そういうのを仕事でつくった(htmlじゃなくってCのTableに変換)事あるんだけど、
4年位前だったんで忘れてたのでググる為の検索Keyを言っただけ。
ちなみに最近はVC++であるデータをhtlmのTableに落とすのを作っています。
0530桃白白
2012/10/20(土) 22:56:32.77Office カスタマー プレビューを入手する | Microsoft Office カスタマー プレビュー
http://www.microsoft.com/ja-jp/office/preview/try-office-preview.aspx
Office 2013のプレビュー版があったからそれインストールした。桃白白はエクセルを使えるし、
マイクロソフトは桃白白からフィードバックを受けることができるし、このスレのみんなは
桃白白がいてくれてうれしいし、大勝利の関係。
0531デフォルトの名無しさん
2012/10/21(日) 02:55:20.94https://friendpaste.com/1v4wWzAy2RQsNSL8MuXjtW
0532デフォルトの名無しさん
2012/10/22(月) 02:16:00.21カウンタのcとか、boolでfとか、IE だからobjieとかはなんとなく使うけど、モジュール内がややこしくなってくると、
わけわからんどうしよう..って感じになってくる\(^o^)/
とくにグローバル変数も使う時とかどうしよ...
センスある命名おしえて下さい。
0533デフォルトの名無しさん
2012/10/22(月) 02:26:51.66自分はこんな感じでやってる。
0534デフォルトの名無しさん
2012/10/22(月) 02:27:17.100535デフォルトの名無しさん
2012/10/22(月) 02:27:47.500536デフォルトの名無しさん
2012/10/22(月) 02:45:17.83でも変数名とか上手く使いこなすと上級者っぽいじゃんw
なるほどInt の C か...(キリッ!) みたいな。
0537デフォルトの名無しさん
2012/10/22(月) 02:51:55.64上級のベクトルが一致してるかは知らんが。
驚天動地 = 国士無双 + 神出鬼没
中二っぽくてよい。
0538デフォルトの名無しさん
2012/10/22(月) 02:55:41.75私用のexcelベースのアプリ作ってるんだけど、アプリ名なんか中二すぎて人に言えない///
0539デフォルトの名無しさん
2012/10/22(月) 03:06:13.69変数名がセルのアドレスとイコールでエラー出たことあったけど、
どこにも情報出てなくて、またメッセージも皆目掴めずで困ったときあったなぁ。
確かアルファべット3文字+数字みたいな変数名を旧バージョンで使ってて、
バージョンアップ後、エクセルの仕様で列数変わって
セル範囲内になっちゃってエラーになった。とかだったかな。
0540デフォルトの名無しさん
2012/10/22(月) 03:11:57.75常用してる変数名だと置き換え作業だけで発狂しそう../(^o^)\
変数名って手ぐせと同じで、使いぐせついちゃいません?
0541デフォルトの名無しさん
2012/10/22(月) 03:18:25.270542デフォルトの名無しさん
2012/10/22(月) 03:45:07.08レス下さった方、参考になりました。
ありがとうございます。
0543デフォルトの名無しさん
2012/10/22(月) 04:21:23.51日本人は英語に弱い人が多いから
特に他人に公開するソースで意味のわからない英語、
タイプしづらい英語を使うとよろしくない。
この前どっかで見たソースで、added_dataみたいな変数名を見かけたが
dが大杉でタイプミスしまくりでお話にならなかった。
ad_dataくらいでいいだろうよ。
0544デフォルトの名無しさん
2012/10/22(月) 04:43:36.38そんなんコード補完つかうでしょ
0545デフォルトの名無しさん
2012/10/22(月) 20:31:34.46>543の頭が弱くてお話にならない感じだな。
0546デフォルトの名無しさん
2012/10/22(月) 21:21:40.450547デフォルトの名無しさん
2012/10/23(火) 01:00:45.00型3文字+内容を端的に表した単語、みたいな。
文字列ならstrTitleとか数値ならintCountてな感じで
MSのサンプルコードは大概そんな感じになってる
0548デフォルトの名無しさん
2012/10/23(火) 07:00:05.910549337
2012/10/23(火) 21:27:55.23下記コードを実行すると応答停止してしまい強制終了させています。
10000を5000に変更すると数分で終わります。
画像は3KB程度です。画像を取り込む数に限界とかあるのでしょうか?
Sub gif10000()
Dim gif10000 As Worksheet
i = 1
Do While i <= 10000
With ActiveSheet.Pictures.Insert(Filename:="C:\TESTgif\bear.gif")
.Name = i
.Top = Rows(i).Top
.Left = Columns(1).Left
End With
i = i + 1
If i Mod 10 = 0 Then Debug.Print i & "行目"
Loop
Rows("1:" & i).RowHeight = 60
End Sub
0550デフォルトの名無しさん
2012/10/23(火) 22:19:53.51限界については明文化されてないと思うけど、
ワークシートに大量のオブジェクト(画像など)を貼るとフリーズするのはまれによくある
64bit版だと多少はマシになる
0551337
2012/10/23(火) 22:45:54.310552デフォルトの名無しさん
2012/10/23(火) 22:53:23.67仕様や制限についてはMSのサポートに聞かないとわかんないよ
0553デフォルトの名無しさん
2012/10/24(水) 19:43:47.20そういったのって可能でしょうか?
0554デフォルトの名無しさん
2012/10/24(水) 19:49:00.10s = range("A1:B10").select
でその範囲の内容を配列に入れれますが
ただしA1:B10の中でA列が赤文字以外の場合のみってしたい場合
つまり一回全選択して、この行とこの行は除くみたいな感じです
それとも一行ずつ見て行区方法しかないのでしょうか?
というのも対象範囲が1万行ぐらいの場合ではじく行が3行程度の場合
スピードを考えると上記のほうがいいのかなと
0555Go!Go!!Go!!!
2012/10/24(水) 20:20:08.18可能
0556デフォルトの名無しさん
2012/10/24(水) 20:21:39.17正規表現使え
0557デフォルトの名無しさん
2012/10/24(水) 20:24:39.250558デフォルトの名無しさん
2012/10/24(水) 21:09:24.61554は可能でしょうか?
0559デフォルトの名無しさん
2012/10/24(水) 21:16:43.370560デフォルトの名無しさん
2012/10/24(水) 21:25:53.90スピードを考えるなら実行すればいいじゃん。
あおりとかじゃなくて、普通にその質問レス書く間で
両方実行してどっちが早いか見るだけでは?
ちなみに前者も、除く行を一個一個探す必要があると思うが・・
0561デフォルトの名無しさん
2012/10/24(水) 21:26:05.93スピードが重要ならスピードを重視すればいいと思うけど?
可能でしょうか?って質問がなんなのかよくわからん
0562デフォルトの名無しさん
2012/10/24(水) 21:29:19.65(回答を得やすい質問の仕方という意味で)
0563デフォルトの名無しさん
2012/10/24(水) 21:34:15.22ここそうじゃない人のためのスレなんだから
エスパー能力を試したりラリーを楽しんだりすればいいんだよ
0564デフォルトの名無しさん
2012/10/25(木) 01:14:35.03実行環境にも左右されるし、実際にやってみた方が早いし確実
0565桃白白
2012/10/25(木) 13:25:39.49http://uploda.cc/img/img5088bd2d83be1.png
画像のように選択した範囲から次のような文字列を作りたいです。
A1
├A2
B1
└B2
├B3
│├B4
│└B5
B6
どうやればいいですか?難しくて頭が爆発しそうです。教えてください。
0566デフォルトの名無しさん
2012/10/25(木) 14:04:41.15パターンを洗い出してそれに当てはめれば?
0568デフォルトの名無しさん
2012/10/25(木) 14:29:36.81B5はB3にぶら下がってるけどB6はB1にぶら下がらないんだよね?
文字列を作るルールを第三者に伝わるように説明できないと回答貰うのは難しいと思うよ
まあじゃれてるだけなんだろうけど
0570デフォルトの名無しさん
2012/10/25(木) 20:19:37.77この階層構造は既存のフォルダ構成をエクセルで作ろうとしてるのかな?
既存のフォルダ構成を階層構造にしたいのであれば、DOSコマンドのtreeコマンドを使う方法があるけど。
因みに俺は>>568じゃない。
0571デフォルトの名無しさん
2012/10/25(木) 21:12:20.76考えてみたけど、ルールが絞り込めない…?
列ごとに上から1セルずつ調べてって、文字列が書いてあるセルが
上と下にあったらその間を全部「│」にする、
文字列が書いてあるセルが上にあって右隣にあったら「└」にする、
「└」があるセルの上、及び右隣に文字列が書いてあったら「├」にする、とか
こんな感じでいけるとおもうんだけど。あるいはこういう風な記述の組み合わせで。
必ず「└」を一発ズバリで判定して書かなきゃいけないわけでもない。
最初「└」を入れた(洗い出した)セルを後で(さらに洗い出して)「├」に書き換えてもいい。
それとAとBで処理を別枠にして回して(A1:D2とA3:D8)、あとから
A1、B1の入っている左列だけは別処理で書き換える必要がでてくる?と思った。
実際に組んでないから苦情は受け付けられない!
0572デフォルトの名無しさん
2012/10/25(木) 21:26:33.89├A2
B1
├B2
│└B3
│ ├B4
│ └B5
└B6
だったらそんなに難しくなさそうだけどなあ
0573デフォルトの名無しさん
2012/10/25(木) 21:39:21.07├A2
B1
└B2
├B3
│├B4
│B5
B6
が正解では?
0574デフォルトの名無しさん
2012/10/25(木) 21:43:55.08こうだね
A1
├A2
B1
└B2
├B3
│└B4
│ │
│ B5
B6
0575デフォルトの名無しさん
2012/10/25(木) 22:28:45.18質問者はルールなんて提示してないけど?
0576デフォルトの名無しさん
2012/10/25(木) 23:37:08.450577デフォルトの名無しさん
2012/10/25(木) 23:42:12.530578デフォルトの名無しさん
2012/10/26(金) 00:57:32.90root
├A1
│└A2
└B1
├B2
│└B3
│ ├B4
│ └B5
└B6
0579デフォルトの名無しさん
2012/10/26(金) 02:14:32.92これ気持ちいいよな。
スクリーンセーバー代わりになるくらい。
0580デフォルトの名無しさん
2012/10/26(金) 08:40:51.64どこが間違っているのかも分からないのですが、ここかなと言う部分を観てください。
Dim Posgyou, Posretu (行、列の変数)
Dim hantei (判定用の変数)
Posgyou = 3: Posretu = 4
hantei = Cells(Posgyou, Posretu) 判定にセル内容を代入
Do
If Cells(Posgyou, Posretu) = hantei Then
省略
Else
hantei = Cells(Posgyou, Posretu)
End If
Posgyou = Posgyou + 1
loop (条件は省略)
先ず、hantei = Cells(Posgyou, Posretu)で最初のセル値を代入して、
以下の、DO LOOP中のIF文の実行後に、1行毎処理していきます。
1行毎のセル値がhanteiと一致しなければ、 hantei に新規のセル値を代入するマクロです。
ここで、間違いはありますか?
デバッグはスル―なのですが、想定通りの実行結果が得られません。
それとも、他の部分の間違いでしょうか?
0581デフォルトの名無しさん
2012/10/26(金) 08:45:37.28┬root
├┬A1
│└─A2
└┬B1
├┬B2
│└┬B3
│ ├─B4
│ └─B5
└─B6
0582桃白白
2012/10/26(金) 09:27:38.16hanteiが変態に見えて、そんな不純な実装してまともに動くわけがないだろと
風紀委員である桃白白が罵ってしんぜようかと思案していたら違っていた、お母さん・・・
なにをどう想定しているのかわからんから間違っているかはわからんけど、重複除去かなんかか?
D
3 A '処理される
4 A '処理される
5 A '処理される
6 B '処理されない
7 B '処理される
8 C '処理されない
こうなるだろ、hanteiの初期値が違うんじゃね?
0583デフォルトの名無しさん
2012/10/26(金) 09:53:02.26ブレークポイントはもちろん設定してない
ただ、前に一度ctrl breakでとめたら、その場所記憶したみたいで、なにしてもそこで止まるようになった。エラーじゃない。
他のPC(EXCEL2003だけどSP2じゃない)からだと止まんないでふつうに走る
こういう不具合出たことあるひといる?バグなのかな?
0584580
2012/10/26(金) 13:07:55.69hantei = Cells(Posgyou, Posretu) シート上のJ3(仮にAとする)
仮に セル値が J3(A)
J4(A)
J5(B) ここでIF文のElese が実行されhantei にセル値(B)が入るようにしたいのです
J6(A) ここでIF文のElese が実行されhantei にセル値(A)
DO LOOP中 cellsのPosgyouを1加算していき、J列の値を判定フラグにしたかったのです。
0585デフォルトの名無しさん
2012/10/26(金) 13:50:35.71ステップ実行で各変数の値をウォッチしてみたら?
期待通りに動かない可能性なんて山ほどあるのでエスパーしきれない
0587デフォルトの名無しさん
2012/10/26(金) 13:59:24.96まず、やりたいことを日本語で書け。
で、何が期待したどうさと違うのかを日本語で書け。
あと「判定フラグ」とかいう、プログラミング用語っぽい単語は使うな。
0588580
2012/10/26(金) 15:30:46.83ステップ実行で値をウォッチを言う機能があるのですね。
もうちょっと、自分でも粘って考えてみます。
実はhanteiをフラグにして処理をIFで変化させるVBAにするつもりだったのです。
0589デフォルトの名無しさん
2012/10/26(金) 15:59:32.57> 実はhanteiをフラグにして処理をIFで変化させるVBAにするつもりだったのです。
あのねぇ、これは「手段」と言うの。
目的を書け。
0590デフォルトの名無しさん
2012/10/26(金) 19:21:43.14間違いはありません。あなたのプログラムした通り動きます
それがあなたの希望通りかは、あなたの希望が解らないので判断できません
とりあえず、
Doループ入ってすぐCells(Posgyou, Posretu) の比較してるけど、行も列もそのままだから、必ずThen側実行するぞ?
なんの修飾もなしにCellsつかってるけど、どのシートのセルみてるか解らんぞ
それ以外は概ね>584の動作してるぞ
0591デフォルトの名無しさん
2012/10/26(金) 19:47:18.96ノシ
リアルタイムで出るよ。
7@64bit のマシンで excel2000 2003 ともに出る。
会社PCで作ってなんら問題なく実行できていたものも、
この環境じゃとまったりする。
例えば
msgbox "a"
range("a1").select
これでも時折セレクトでエラーハッスル。
もちろんなんら材料があるわけないので、
エラー(デバッグ応答)時にそのまま続けて実行すると、普通に抜ける。
何回同じマクロを同じ環境でやっても、
出たり出なかったりするんだけど、出るときはかなりの頻度だよね。
まぁ自分も調べに掛かったけど、ヒットしなかったから放置している。
ブレークを解除しろとかよく見つかるけど、してねぇよ。ってな。
0592デフォルトの名無しさん
2012/10/26(金) 20:12:25.450593デフォルトの名無しさん
2012/10/26(金) 20:18:13.980594デフォルトの名無しさん
2012/10/26(金) 22:43:50.68指定範囲の番号に該当する書類を作るような仕組みを作りたく。
しかし無限印刷になってしまいます・・・お助けくださいませ。
Sub 印刷()
a = InputBox("開始番号を入力")
z = InputBox("終了番号を入力")
Do
Range("E1") = a
a = a + 1
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Loop Until a = z
End Sub
0595デフォルトの名無しさん
2012/10/26(金) 23:12:03.13無限印刷ってなに?
一般的な用語使わないと伝わらないよ
とりあえずロジックの問題か印刷の問題かぐらい切り分けしたら?
0596デフォルトの名無しさん
2012/10/26(金) 23:17:46.91開始番号1、終了番号10と入力しても10で終わらずずっと印刷され続けます。
loop関数が無限ループになってしまってるのではと思うのですが解決法が解らず。
0597デフォルトの名無しさん
2012/10/26(金) 23:24:26.06※「Hnn(年度)」…平成(nn-1)年4月〜平成nn年3月
※「中之島」「渡辺橋」「大江橋」「なにわ橋」…「H21」10月の[総数]は日割り(13/31日) 。
※「大阪難波」「桜川」「ドーム前」「九条」…「H21」3月の[総数]は日割り(12/31日) 。
※「総数」…「H18」の7月以降及び年度平均はOTS線を除いた数値となっている。
平成23年4月〜平成24年8月
http://www.city.osaka.lg.jp/keikakuchosei/page/0000020916.html
[2012年10月25日]
http://www.city.osaka.lg.jp/keikakuchosei/cmsfiles/contents/0000020/20916/6-2.xls
平成23年3月〜平成13年4月
http://www.city.osaka.lg.jp/keikakuchosei/page/0000164566.html
[2012年4月18日]
http://www.city.osaka.lg.jp/keikakuchosei/cmsfiles/contents/0000164/164566/12-8.xls
0598デフォルトの名無しさん
2012/10/26(金) 23:55:13.91とりあえず
Sub 印刷() の次に
Dim a As Integer, z As Integer
の1行入れろ
InputBoxにIntegerにならない文字列入れたときは知らん
0599デフォルトの名無しさん
2012/10/27(土) 00:00:13.38ロジックの問題か印刷の問題かぐらい切り分けしたら?
って言ってるのになんでやらないの?
0600デフォルトの名無しさん
2012/10/27(土) 00:03:07.830601デフォルトの名無しさん
2012/10/27(土) 00:14:24.40お前こそ素人に分かる一般的な用語で説明してやれよw
0602デフォルトの名無しさん
2012/10/27(土) 00:15:30.290603デフォルトの名無しさん
2012/10/27(土) 00:30:40.74出来ました、有難う御座いました。
小さい会社でマクロのマの字も知らず無茶振りされ、
ネットで探した式もまともに動かず途方にくれておりました。
>>599
すみません、ロジックか印刷かという文面が良く解りませんでした。
印刷の問題はプリンタの会社に電話するものではないのでしょうか。
0604デフォルトの名無しさん
2012/10/27(土) 06:24:14.33もしも今回のような無茶振り?がまだ続くようなら
一回本買って、VBAの勉強した方がいいよ
基礎の基礎の部分からわけわからんままやってるだろ
VBAどころかプログラムの根本が分かってない感じ
0605デフォルトの名無しさん
2012/10/27(土) 08:02:55.620606デフォルトの名無しさん
2012/10/27(土) 08:13:19.97専門外の事だ→勉強しなきゃ の思考回路は社畜に陥りやすい
0607桃白白
2012/10/27(土) 09:15:49.89>>570-579, >>581
ありがとうございます。
root
├A1
│└A2
└B1
├B2
│└B3
│ ├B4
│ └B5
└B6
ご提案いただいたこの形式にしたいと思います。桃白白はこれに決めました。
この文字列を作りたいという強い思いが桃白白の胸にありますが、問題はプログラムだと思います。
それが問題だと桃白白は認識しています。みなさんならどのように実装しますか?教えてください、お願いします。
0608デフォルトの名無しさん
2012/10/27(土) 10:56:27.67これは業者にお金払って開発してもらうレベルの案件。
通りすがりの俺らでは無理。
0609デフォルトの名無しさん
2012/10/27(土) 11:07:50.08(2,1)から(B列の最終行-1,1)までの範囲で下に向かってセル一個ずつ選択するループ
もし同じ行のB列に文字があったら"├"、なければ"│"を書き込む。
最後に(B列の最終行,1)に"└"を書き込む。
次にB列の最初の文字列(x,2)について、その次の文字列(y,2)を求めて
(x+1,3)から(y-1,3)の範囲でA列のときと同じ作業をする。
終わったら(y,2)についても同様の処理。
ってのを順番に繰り返せば良いんでない?
同じ処理の繰り返しになるから再帰処理で書けばコードはだいぶ短くなると思う。
0610デフォルトの名無しさん
2012/10/27(土) 11:42:41.96MkDir("A1\A2")
MkDir("B1")
MkDir("B1\B2")
MkDir("B1\B2\B3")
MkDir("B1\B2\B3\B4")
MkDir("B1\B2\B3\B5")
MkDir("B1\B6")
Set WSH = CreateObject("WScript.Shell")
Set wExec = WSH.Exec("%ComSpec% /c tree A1 > tmp.txt")
0611桃白白
2012/10/27(土) 12:45:53.62桃白白にお金があれば業者の可愛い女性の担当者にお家に来てもらって、
ところで桃白白さんイケメンですよね、もてるんじゃないですか?いやそんなことないですよ・・・むぎゅ、
みたいな展開も期待したいところだけど、残念ながら桃白白お金ないから無理
0612デフォルトの名無しさん
2012/10/27(土) 12:50:02.94もう作れるだろ作ればいい
多少ソースが汚かろうが思い通りに動けばいいだろ
0614デフォルトの名無しさん
2012/10/27(土) 14:46:46.27それなら以前作ったことあるよ
ポイントは、深渡を表すグローバル変数を用意する、当然回帰関数
0615デフォルトの名無しさん
2012/10/27(土) 15:01:29.36グローバル変数じゃない
深渡は呼ぶ側で引渡し、呼ばれた方でインクリメントする
0616デフォルトの名無しさん
2012/10/27(土) 15:01:59.17金なくても自画撮写真くらいうpできるだろ
0617デフォルトの名無しさん
2012/10/27(土) 15:15:50.88ExcelのVBAでやることに何の意味があるのか不明だし
誰もコードを出さないところから見ても面倒なことは間違いないし
この話題はここで終わりとしよう。
0618デフォルトの名無しさん
2012/10/27(土) 15:25:24.44この時点でネタ確定なんだからスルーしておけばいい
0619デフォルトの名無しさん
2012/10/27(土) 15:34:56.90超初級の練習問題レベルだし
別に面倒じゃないけど
やる気が起こらない
なにかやる気スイッチ押してくれればやるお
0620桃白白
2012/10/27(土) 15:42:03.09心外、桃白白マジ心外。
>>619
(  ̄∇ ̄)σ=σ[]ピンポン!!ピンポン!!ピンポン!!ピンポン!!
>>609
読んだから、桃白白ちゃんと読んだから。
いま桃白白のタマムシ色の脳細胞で考えているところだから。
0621デフォルトの名無しさん
2012/10/27(土) 15:44:08.320622デフォルトの名無しさん
2012/10/27(土) 17:02:58.90シート2の1,2列をシート1の1.2列にコピーするコードです。
Worksheets("Sheet1").Range(Columns(1), Columns(2)).Value = Worksheets("Sheet2").Range(Columns(1), Columns(2)).Value
これの後半のRange(Columns(1), Columns(2))で引っかかるのです。
これがRange("A:B")なら大丈夫なのですが、何がいけないのでしょう。
0623桃白白
2012/10/27(土) 17:44:22.20Columnsプロパティはオブジェクトが指定されないときアクティブシートの列を返すんじゃね。
オブジェクトが指定されてないからアクティブシートの列を返してSheet2がアクティブシートじゃないから
列が見当たりませんぜ的なことなんじゃね。
0624デフォルトの名無しさん
2012/10/27(土) 17:58:05.71JAVAで言う、ThisやSuperのようなものは無いのでしょうか
0625デフォルトの名無しさん
2012/10/27(土) 18:11:54.500626デフォルトの名無しさん
2012/10/27(土) 18:38:44.00分からないんだったら回答すんなよ。
回答するんだったら裏くらい取れよ。
自分の問題さえも解決できないのに、他人の問題に口出しすんな。
話がややこしくなるだけ。
質問している人や質問の内容に対して回答している人に対して大変失礼。
0628デフォルトの名無しさん
2012/10/27(土) 18:52:42.10反証云々は関係ないんだよ。
質問者に対してこうなんじゃね?っていうこと自体問題が理解できていないこと。
推測なんて意味無いからw
知ったかもいい加減にしとけ。
ようは何も分かってないんでしょwwwww
0629桃白白
2012/10/27(土) 18:59:41.40桃白白は回答するのに客観的ソースは必ずしも提示する必要はないと思ってるわけ。
だから思いついたままに回答するわけ。でもお前は裏を取って回答するべきだと思ってるわけだろ。
桃白白が何もわかってないことの根拠がないじゃん。何もわかってないんでしょってお前は桃白白に
聞いちゃってんじゃん。桃白白はそれで問題ないという立場だけれどもお前は違うわけだから
お前は自爆してるだけじゃん。ようはお前は桃白白に嫉妬してるだけだってこと。質問に答えるどころか
桃白白に絡んでるだけじゃん。
0630デフォルトの名無しさん
2012/10/27(土) 19:04:44.56ありがとござます。どこかでMYみたいなものを見たけど違うものだったか
0631デフォルトの名無しさん
2012/10/27(土) 19:09:26.000632デフォルトの名無しさん
2012/10/27(土) 19:13:47.12思いついたまま回答されることほど質問者に対して失礼。
この時点で質問に対してきちんと理解しないで回答してるってこと。
お前に対して凄い迷惑と思うことはあるけど、嫉妬なんてしたことないw
だってきちんと回答できてないんだもんwwww
お前の回答は百害あって一利なし。
0633622
2012/10/27(土) 19:15:19.85確かにアクティブシートを変えると引っかかる所が変わる気がします。
しかしながら、オブジェクトの指定方法というのが分かりません、自分なりにこうではないかと、
0634622
2012/10/27(土) 19:17:23.62Dim sheet1 As Worksheet, sheet2 As Worksheet
Set sheet1 = Worksheets("Sheet1")
Set sheet2 = Worksheets("Sheet2")
sheet1.Range(Columns(1), Columns(2)).Value = sheet2.Range(Columns(1), Columns(2)).Value
としましたが駄目でした。申し訳ありませんが、オブジェクトの指定方法をいうのを教えて頂けますでしょうか。
0635桃白白
2012/10/27(土) 19:23:56.70ひどい、いっとくけど桃白白が傷つかないと思ったら大間違いだからな
すごい迷惑というのを直ちに撤回してもらいたいよ、ああひどい
0636桃白白
2012/10/27(土) 19:31:25.80Columnsプロパティを呼ぶときにオブジェクトを指定してみちゃいなよ
sheet1.Range(sheet1.Columns(1), sheet1.Columns(2)).Value = sheet2.Range(sheet2.Columns(1), sheet2.Columns(2)).Value
0637デフォルトの名無しさん
2012/10/27(土) 19:35:56.91Withステートメントくらい使えよボケ!
0639デフォルトの名無しさん
2012/10/27(土) 20:17:23.98こんなmp3ファイル一覧の取得の際に、ファイル名以外に
タイトル、サイズ、ジャンルなどを一緒に取得したいです
VBやC#ではできるみたいなのですが
VBAでは可能なんでしょうか?
いろいろ設定が必要な気がしますが
0640デフォルトの名無しさん
2012/10/27(土) 20:56:14.84>>636でWith使っても大して意味ない気がする
Sheet1かSheet2のどっちかしか括れないでしょ。
0641622
2012/10/27(土) 21:08:25.81withステートメントでまとめようとしても片方しか出来ません。
変数で受け渡して一応出来たのですが、もう少しスマートな方法はあるでしょうか。
0642622
2012/10/27(土) 21:11:33.45Set sheet1 = Worksheets("Sheet1")
Set sheet2 = Worksheets("Sheet2")
Dim a As Variant
With sheet2
a = .Range(.Columns(1), .Columns(2)).Value
End With
With sheet1
.Range(.Columns(1), .Columns(2)).Value = a
End With
0643デフォルトの名無しさん
2012/10/27(土) 21:25:50.81質問の趣旨からは外れるけど、
このコードだとむしろ変数sheet1とsheet2のほうがあんまり意味ないね。
Dim a As Variant
With Worksheets("Sheet2")
a = .Range(.Columns(1), .Columns(2)).Value
End With
With Worksheets("Sheet1")
.Range(.Columns(1), .Columns(2)).Value = a
End With
これだけでいける
0644デフォルトの名無しさん
2012/10/27(土) 21:34:38.30Dim sheet1 As Worksheet, sheet2 As Worksheet
Set sheet1 = Worksheets("Sheet1")
Set sheet2 = Worksheets("Sheet2")
sheet1.Columns(1) = sheet2.Columns(1)
sheet1.Columns(2) = sheet2.Columns(2)
こーゆーのはどうだ?
なんなら最後2行をFor Nextでまとめると
行数は増える(たぶん命令実行のコストもかさむ)けど
メンテナンス性は増すかも知れん。
Dim sheet1 As Worksheet, sheet2 As Worksheet
Dim I As Long
Set sheet1 = Worksheets("Sheet1")
Set sheet2 = Worksheets("Sheet2")
For I = 1 to 2
sheet1.Columns(I) = sheet2.Columns(I)
Next I
0645デフォルトの名無しさん
2012/10/27(土) 21:38:43.39Dim I As Long
For I = 1 to 2
Worksheets("Sheet1").Columns(I) = Worksheets("Sheet1").Columns(I)
Next I
0646645
2012/10/27(土) 21:42:16.01Dim I As Long
For I = 1 to 2
Worksheets("Sheet1").Columns(I) = Worksheets("Sheet2").Columns(I)
Next I
ですた
Worksheets("Sheet1").Columns(1) = Worksheets("Sheet2").Columns(1)
Worksheets("Sheet1").Columns(2) = Worksheets("Sheet2").Columns(2)
このほうが短いか。スマートじゃないけど。
0647デフォルトの名無しさん
2012/10/27(土) 22:00:24.19Sub A()の前にpの型を宣言すればいいのですが、あんまりスマートになりません。
Sub B()内で宣言をして、値を保持する方法ないですか?(ただしプログラムの実行が終わればpは初期化)
Sub A()
dim i as long
for i = 1 to 100
call B
next i
End Sub
Sub B()
dim p as long
if p = 0 then
elseif p = 1 then
else
end if
p = p + 1
End Sub
0648622
2012/10/27(土) 22:02:01.29ご回答ありがとうございます。いろいろな書き方がありますね。
微妙に不規則に左右に連続して同じような式を書くことがあります。
0649622
2012/10/27(土) 22:04:05.75sheet1.Range("A1")=sheet2.("B3")
sheet1.Range("C5")=sheet2.("D4")
・・・・
この場合はやはり>>643がベストですかね。
そうなると普通に書いた方がいいかなと思ってしまいます。
0650デフォルトの名無しさん
2012/10/27(土) 22:17:32.39pをStaticにしろ
0651デフォルトの名無しさん
2012/10/27(土) 22:25:03.71可能
0652643
2012/10/27(土) 22:28:53.42それはむしろ>>644のやり方ではなかろうか?
でもって、セル一箇所ずつ指定するなら
Range()よりCells()の形式のほうが便利だと思うよ。
Range("A1")はCells(1,1)だしRange("B3")ならCells(3,2)だから
>>649のコードは
sheet1.Cells(1,1)=sheet2.Cells(3,2)
sheet1.Cells(5,3)=sheet2.Cells(4,4)
ってなる。
Cells(x,y)みたいに変数が使えるから
Cellsで書いておくといろいろと捗る場合が多いよ。
0653デフォルトの名無しさん
2012/10/27(土) 22:37:07.35それだと再び実行したときにpが100から始まってしまいませんか?
今手元にプログラムがなくて、すぐに確認できないのですが、
たしか試してプログラムが終了しても値が保持された気がします。
0654622
2012/10/27(土) 22:40:05.66今までは
with sheet1.
Range("A1")=sheet2.("B3")
Range("C5")=sheet2.("D4")
end with
としていましたが、右の部分もwithでまとめたいなというのが元なのですが、>>644の方が良いでしょうか。
0655デフォルトの名無しさん
2012/10/27(土) 22:41:40.29なんでB内で宣言をするようなスマートじゃない方法を採ろうと思うの?
0656622
2012/10/27(土) 22:42:36.50with sheet1.
Range("A1")=sheet2.Range("B3")
Range("C5")=sheet2.Range("D4")
end with
ですね。
0657643
2012/10/27(土) 23:04:35.86ケアレスミスだと思うけど
>with sheet1.
>Range("A1")=sheet2.Range("B3")
>Range("C5")=sheet2.Range("D4")
>end with
じゃなくて
with sheet1
.Range("A1")=sheet2.Range("B3")
.Range("C5")=sheet2.Range("D4")
end with
ですね("."の位置が違ってる)
この程度のものであればWith使うほどの事もなさそうに思います。
Withってネストできるけど
それはあくまでもより下位のオブジェクトに対してであって、
たとえば
Workbooks("hoge.xlsx").sheets("sheet1").Range("A1")
の時に
With Workbooks("hoge.xlsx")
With .sheets("sheet1")
.Range("A1")
End With
End With
と書くことは可能ですけど、
>>656みたいなときには
sheet1 と sheet2 の両方を同時に With で指定できないですからあんまり意味ない気がします。
私が>>643で書いたのはあの時点のコードではsheet1とsheet2という2つの変数が
あんまり有効に活用されてないってことであって、
>>656に関してならWorksheetの指定に変数を使うやり方のほうが中途半端にWithを使うより有効だと思います。
0658622
2012/10/27(土) 23:44:27.94ありがとうございます。
この例は聞きやすいように短くしたのですが、どちらにしても、右と左を端的にwithでまとめる方法はないという事ですね。
場合によって変数を使っていくようにします。
0659643
2012/10/28(日) 00:09:37.35Withでまとめられない場合、変数名を短くするのも有効な手だと思いますよ。
たとえば、
Dim sheet1 As Worksheet
を
Dim sh1 As Worksheet
にすればコードが若干短くできますよね。
あんまり短い変数名だと可読性が下がるんでやりすぎは拙いですけど、
Workbook型ならWBで、Worksheet型ならSH、とか
自分なりの命名則を決めておくと効率が良いです。
(ちなみに私は変数名には大文字使ってます。そのほうがタイプミスが分かりやすいんで)
まぁ、自分ひとりでやる作業じゃないなら職場全体とかプロジェクト全体とかで意思統一を計る必要が有りますけど
そういう職場ならすでに何らかのルールが決められてるでしょうからそれに従うって事で。
0660デフォルトの名無しさん
2012/10/28(日) 00:29:57.38さすがにその個人的ルールは特殊すぎるので公の場で紹介しない方がいいと思う
特に初心者が多いこのスレではなおさら
0661桃白白
2012/10/28(日) 07:55:56.44あ、どうもこちら桃白白、Aの終わりに初期化するしかないんじゃね
Sub A()
Dim i As Long
For i = 1 To 100
B
Next
C 0
End Sub
Sub B()
Dim p As Long
p = C(0)
p = p + 1
Debug.Print p
C p
End Sub
Function C(n) As Long
Static s As Long
C = s
s = n
End Function
0662デフォルトの名無しさん
2012/10/28(日) 09:07:19.90そもそも広い範囲ならコピーするのが妥当だがそのスタイルならResize使えば変数は要らん
Sheet1.Cells.Resize(,2).Value = Sheet2.Cells.Resize(,2).Value
広い範囲の配列を代入するのは馬鹿げているが
0663デフォルトの名無しさん
2012/10/28(日) 10:58:26.42Cancel As Boolean)
Dim myPic
Dim myRange As Range '画像を配置するセル範囲
Dim rX As Double, rY As Double
myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif")
If VarType(myPic) = vbBoolean Then Exit Sub
Set myRange = Target 'このセル範囲に収まるように画像を縮小する
Application.ScreenUpdating = False
With ActiveSheet.Pictures.Insert(myPic).ShapeRange
rX = myRange.Width / .Width
rY = myRange.Height / .Height
If rX > rY Then
.Height = .Height * rY
Else
.Width = .Width * rX
End If
.Left = .Left + (myRange.Width - .Width) / 2 '写真を横方向の中央に配置
.Top = .Top + (myRange.Height - .Height) / 2 '写真を縦方向に中央に配置
End With
Application.ScreenUpdating = True
Cancel = True
End Sub
こんな感じの写真挿入のマクロがあるのですが、メールでファイル添付するときにマクロを外して送りたいのですが、送る方法ってありますか?
送る際相手方がマクロのないファイルを欲しいそうなので、困っております。もし、マクロを外した場合解除されてしまう時は、他にマクロを使わずに効率的ないい方法はないでしょうか?数百枚の写真を貼り付けるので、いい方法があればお願いします。
0664デフォルトの名無しさん
2012/10/28(日) 12:36:57.54エクスポートするなりして別のファイルとして送ればいい
0665デフォルトの名無しさん
2012/10/28(日) 12:52:28.230666デフォルトの名無しさん
2012/10/28(日) 13:11:33.32それとも写真が貼り付けられた完成品があればいいの?
前者は無理な注文、後者なら写真貼ってマクロ消して送ればいいだけだし、
一体、何を悩んでるのだろうか。
0667デフォルトの名無しさん
2012/10/28(日) 13:57:56.02関係ないけどそのUIで数百枚の写真を貼り付けるのはものすごく大変そうだな
0668桃白白
2012/10/28(日) 15:29:00.34できた、できました。桃白白マジヤッホー。ありがとうございました。
https://friendpaste.com/j4GDQaQsbkxeX8r2MoqWe
0669デフォルトの名無しさん
2012/10/28(日) 15:32:35.09どうしても関数Bでpを宣言しな蹴ればいけないのかな?
提示されたコードを見る限り、関数Aの変数iを関数Bに引数として渡せば済むような気がするけど。
Sub B(ByVal p As Long)
if p = 0 then
elseif p = 1 then
else
end if
End Sub
0670デフォルトの名無しさん
2012/10/28(日) 17:47:00.87マクロの中身の問題というよりは取り扱いの問題だと思う。
・相手がマクロを無効にする設定にする
・写真を貼り付けて完成品にしたファイルからマクロを消して送る。
またはそれを目的にマクロに手を加える。
マクロを記述したSheet1と貼り付ける目的のSheet2を作って、完成後のSheet2だけを
新規Excelファイルとして保存するように作業手順を改めるとか。
・あなたが今与えられている環境があなたの自由に出来るのなら、
Excelテンプレートとしてマクロを記述、必要なファイルを開いた時に
そのマクロが作動するようにする、とかもできるはず。
写真を何枚か貼ってリサイズして作ったシートからマクロを除去しても、
既に貼られてリサイズされてる写真が勝手に大きさが変わるってことは考えにくい。
試してみた?
0671デフォルトの名無しさん
2012/10/28(日) 18:18:01.29とりあえず、マクロの入ったものはNGだそうで、困ってる形です。
完成品でマクロを貼り付けたシート内を削除したのですが、マクロがある形になってしまいました。
0672デフォルトの名無しさん
2012/10/28(日) 18:57:20.17効率化?何を効率化したいの?
困ってるとか困ってないとかそんな情報役に立たない
ブックに記述されたVBAコードの削除方法が知りたいのかな
わからないならzipとかで圧縮して送っちゃえばいいんじゃね?
0673デフォルトの名無しさん
2012/10/28(日) 19:06:51.51いくらなんでも釣り針が大きすぎるだろ・・・
0674デフォルトの名無しさん
2012/10/28(日) 19:11:43.77「excelからマクロを削除」でググるとか?
0675デフォルトの名無しさん
2012/10/28(日) 19:13:41.14そういう場合は標準モジュールにマクロを書くのがおすすめ。
その標準モジュールをエクスポート(basファイル)した後に解放すれば、マクロのないブックになる。
再度同じマクロを使いたい場合は、エクスポートしたbasファイルをインポートして使う。
因みに標準モジュールが分からないということならググれ。
0676デフォルトの名無しさん
2012/10/28(日) 19:15:28.58マクロを完全に削除することができました。
まだ、本で学んで日が浅く、少しづつ触っているのですがとても助かりました。
今回は助けていただき、ありがとうございました。
0677デフォルトの名無しさん
2012/10/29(月) 00:25:39.39A1からA50にランダムに"☆"が入っています。ここから☆が入っていないセルを18コ、☆が入っているセルを2コ、計20コのセルを選ぶにはどうすればよいですか?
ただし、選ぶセルはどれも行が連続せず、また、☆は少なくとも2コ以上あり、☆が多すぎて☆の入っていないセルが18コ選べない場合は☆を3コ以上選び、必ず計20コのセルを選択するものとします。
0678デフォルトの名無しさん
2012/10/29(月) 00:42:02.210679デフォルトの名無しさん
2012/10/29(月) 01:12:47.30課題かなんか?
☆が入ってないセルを調べて配列Aにいれとく
☆が入っているセルを調べて配列Bにいれとく
配列に入れる直前に特殊条件(行が連続しないとか)に該当するものを入れないようにする
☆の入っているセルを2個、配列Bから選んで抽出
引数Cを用意して最初に20をいれ、抽出するごとに1減算(この時点で18)
☆の入ってないセルを配列Aから選んで抽出
引数Cは抽出するごとに1減算を続ける、変数Cが0になれば終了
引数Cが0に満たなかった場合は、☆の入っているセルを配列Bから選んで抽出
引数Cが0になったら抽出は終了
必要ならrndでランダムな数字をだしてそれに従うようにする
その場合既に選択済みのセルを再度選択しないよう、抽出する時に
配列上から順に全部チェック,も追加。
適当。抽出方法はお任せ。
0680デフォルトの名無しさん
2012/10/29(月) 01:40:08.96まず2個の☆を選ぶくみ合わせをしらべて、その状態で18個の空白を選択できるか調べないとダメじゃね
全部の星2個選ぶ組み合わせで順次チェックして、それがOKならそれを出力して終了
全部の星2個選ぶ組み合わせで空白18個が不可能ならどうするかは、選択の優先順位考えないとだめだな
まあ、星三つでやって、だめなら星4つ....って順次増やすのが妥当か
0681デフォルトの名無しさん
2012/10/29(月) 08:32:28.26個人的にはマクロ用のブックを一つ作る。
使うときはマクロ用のブックを起動。
画像編集用のファイル名、挿入する画像のフォルダ又はファイル名を指定しマクロ実行かな。
basファイルを使うやり方は元のファイルを手で触る必要があるし、マクロの解放忘れとか問題が出そう。
0682デフォルトの名無しさん
2012/10/29(月) 12:24:43.96「値が表示されているすべてのセル」を指定したいのですが、
VBAで指定する(新たに作成する)方法はあるでしょうか?
0683デフォルトの名無しさん
2012/10/29(月) 15:01:36.19☆が連続した行に入ってる場合とかどうすればいい?
というか具体的に質問してるわけだし誰か完璧なコード書いてくれないか?
0684デフォルトの名無しさん
2012/10/29(月) 15:04:19.880686デフォルトの名無しさん
2012/10/29(月) 19:30:31.05完璧な仕様書いてないのに
完璧なコードを出せるわけないじゃない
諦めて自分で作れ
ヒントは出てんだから
0687デフォルトの名無しさん
2012/10/29(月) 20:08:13.17ヒントを貰って自分で書くって人がヒントを貰いに来る場だからな
0688デフォルトの名無しさん
2012/10/29(月) 21:21:38.29元々、答えたいやつ、作りたいやつは勝手にすればいいってスレだから
0689デフォルトの名無しさん
2012/10/29(月) 21:47:53.08もっと語ろうぜや。
0690デフォルトの名無しさん
2012/10/29(月) 21:49:08.13まー仕事とかですぐ使うような人のはすぐ答えてもいい気はする
0691デフォルトの名無しさん
2012/10/29(月) 21:49:41.930692デフォルトの名無しさん
2012/10/29(月) 21:51:00.15同意。
あなたはすばらしい。
ところでExcelVBAを使って野球シミュレーションを作りたいのですが
アルゴリズムはどうすればいいですか?
ボールの移動のようなアクション部分は一切排除して、
各選手の能力値(野手なら長打力とかミート力や総力や守備力などなど、投手なら球速や切れやスタミナなどなど)を設定しておき
結果は「ヒット」「三振」「ホームラン」「内野ゴロ」みたいにテキストで出るだけ、というところから始めよう。
0693デフォルトの名無しさん
2012/10/29(月) 21:53:39.590694692
2012/10/29(月) 21:54:41.25イニングの点数だけしか表示せず(★)
それを1シーズン144試合やって優勝チームを決める、ところからスタートしてもいいかもしれない。
★とは、単に下のように点数しか表示しない単純なもの。
巨人 0 0 2 1 0 0 3 0 0 6
阪神 0 0 0 0 0 0 0 0 0 0
0695デフォルトの名無しさん
2012/10/29(月) 22:08:19.090696デフォルトの名無しさん
2012/10/29(月) 22:20:40.15VBAも自ずとExcelの主な使途である事務処理の
支援・自動化のために使うべきものであって
☆を選ぶとか野球シミュレーションとか
そんなのなんでExcelでやるんだよって突っ込みたくなる
テーマはスレ違いだと思うぞー
0697デフォルトの名無しさん
2012/10/29(月) 22:31:38.18>>1はスレ主である。
>>1のテンプレが嫌なら自分でスレくらい立てろ。
テンプレ無視だったらどんな話題でもOKになるというのが分からないみたいだね。
何事にもルールがあってそれが嫌なら自分で作ればいいだけのこと。
スレ立てたとしても、お前みたいなやつがまた沸いてきて
スレを荒らされるのは目に見えてるけどね。
0698デフォルトの名無しさん
2012/10/29(月) 22:58:50.96そういうのは糞ウゼェから別スレでやれ
0699デフォルトの名無しさん
2012/10/30(火) 00:15:24.39それ用のスレがどっかになかったか?
0700桃白白
2012/10/30(火) 08:52:17.84☆が連続した行に入ってるときは片方を読まないようにすればいいと思うけど、
☆が入っているセルが2個、☆が入ってないセルを18個、計20個の組み合わせを1個見つければいいのか?
それとも可能な組み合わせを全部列挙する必要があるのか?
0701デフォルトの名無しさん
2012/10/30(火) 16:45:56.12いや、シミュレーションは事務処理の自動化の醍醐味だろ?
0702デフォルトの名無しさん
2012/10/31(水) 01:05:02.15でもここExcelVBAスレだしな。
>>677だって50*50の配列でってすれば
他言語のスレでも普通に質問できちゃうだろ
そういうのはそういうスレで聞いた方が早いし確実だと思うぜ
0703デフォルトの名無しさん
2012/10/31(水) 21:08:04.12Worksheets("temp").Activate
i = 2
Do
i = i + 1
targetFile = Cells(i, 3)
Set FoundCell = Worksheets("全FileList").Range(Cells(2, 2), Cells(lastrow, 2)).Find(What:=targetFile)
If FoundCell Is Nothing Then
If Right(targetFile, 4) = ".lzh" Then
er_cnt = er_cnt + 1
Call S_Output2Text(targetFile, "Excel不一致データ", "append")
End If
End If
Loop Until Cells(i, 1) = ""
tempシートのC列にあるファイルリストと事前に集めておいた"全FileList"
シートのB列とを比較してチェックしようとしているんですが、
(lastrowには18832という値が入っています(可変ですけど))
Set FoundCell = 〜のところで
アプリケーション定義またはオブジェクト定義のエラーです
となります。
解決策教えて下さい〜m(__)m
0705デフォルトの名無しさん
2012/11/01(木) 07:59:49.380706704
2012/11/01(木) 10:40:04.62Cellsオブジェクトの使い方を間違ったのがそもそもの原因なんだから
その辺きちんと把握しておいたほうが今後のためだと思う。
たとえば、
dim R As Range
Sheets(2).Activate
Set R = Sheets(1).Range(Cells(1,1),Cells(2,2))
というコードは
Set R = Sheets(1).Range(Sheets(2).Cells(1,1),Sheets(2).Cells(2,2))
だと解釈されるからエラーになる。
でも、Sheets(2)のセルA1に"A1"とセルB2に"B2"を入力
(別に"F2"と"Y3"とかでも何でも良いし、""も不要)しておいて
こんな風に書くとエラーにならない。
Set R = Sheets(1).Range(Cells(1,1) & ":" & Cells(2,2))
Set R = Sheets(1).Range(Cells(1,1).Value,Cells(2,2).Value)
(どちらも同じ動作をする)
まぁ、Sheets(2)のセル内にA1形式でセルを指定しておかないと結局エラーになるけど。
とにかく、ただ単に"Cells"と書くとActiveシートに対して処理をしてしまうから
常にそれを意識していないとエラーになったり、あるいは意図しない動作になったりする。
で、>>662はそういう暗黙のオブジェクト指定を気にせずにすむ書き方。
>>703のケースだと、
Set FoundCell = Worksheets("全FileList").Cells(2, 2).Resize(lastrow -1).Find(What:=targetFile)
と書くと問題なく動く。
この書き方を覚えておくと色々応用が利いて便利。
0707デフォルトの名無しさん
2012/11/01(木) 16:12:29.91703です。解説ありがとうございます。m(__)m
0708デフォルトの名無しさん
2012/11/01(木) 22:03:31.570709デフォルトの名無しさん
2012/11/01(木) 23:02:20.99質問する初心者がわざわざテンプレなんて読むわけないだろ
常識で考えろ
0710デフォルトの名無しさん
2012/11/02(金) 00:23:21.70回答者が楽しちゃいかんのか?
「テンプレ嫁」で終わりなんだが。
0711デフォルトの名無しさん
2012/11/02(金) 00:32:47.59>>708は「同じような質問がなくなると思う」って言ってるんだよ
0712704
2012/11/02(金) 01:26:22.61全部書いてたらテンプレだけで1000いきそうだよ。
0713デフォルトの名無しさん
2012/11/02(金) 18:04:25.33arr = Split(wk, vbCrLf)
で配列に改行でsplitした値を格納しましたが
この配列の数を取得するにはどうしたらよいでしょうか?
arr.Length
count(arr)
いずれも vba だと認識されません。
0714デフォルトの名無しさん
2012/11/02(金) 18:10:46.790715桃白白
2012/11/02(金) 18:36:07.56もしもし桃白白です、桃白白に聞いちゃう? じゃあ桃白白が教えちゃう。
Function Count(a) As Long
Count = UBound(a) - LBound(a) + 1
End Function
0716デフォルトの名無しさん
2012/11/02(金) 19:53:32.48すみません。
ほわいとぴーちさん
自己可決しました。
0717デフォルトの名無しさん
2012/11/02(金) 20:33:00.770718デフォルトの名無しさん
2012/11/03(土) 05:01:48.37これが今のVB.netのごとく、senderなんたらとか
関数の宣言に意味不明な単語が付くような
極悪仕様に改訂されることは将来あり得るかな?
VBAは俺が唯一理解できるコンピュータ言語なので
そうなったら会社のシステムをメンテできなくなって
非常に困るのだけど。
0719デフォルトの名無しさん
2012/11/03(土) 07:11:52.76そういうのはこんなところで議論しても全く意味がない。
Microsoftに聞くのが一番。
メンテの話なら前もって会社に伝えておくのがいいと思う。
システムなんて永久に使われるということはないわけだから、
VBAが使えないシステムに切り替えたときに、それ相応にコストがかかると。
そんなこと考えるんであれば、Microsoft Officeなんか使わずOpenOffice.org使えばいい。
無料だから、無駄にお金をつぎ込むわけじゃないしね。
水面下でVBAマクロをOpenOffice.org用に移植しておけば切り替えとかもすんなりいくだろうし。
0720桃白白
2012/11/03(土) 09:55:07.78そうなったら桃白白を雇ってくれたらいいじゃん。あまり複雑化したらそれはもう
素人が手を出すようなことじゃなくなっちゃうしさ、プログラム作るのは専門の
会社にまかせて、そのあいだ桃白白がお前とあやとりしてあげるよ。
0721デフォルトの名無しさん
2012/11/03(土) 10:53:41.36ここに電話番号と本名書いて
↓
0722桃白白
2012/11/03(土) 11:19:08.72そんなことしたらただでさえイケメンの桃白白がストーカーの被害にあうことは目に
見えているじゃん。やめろやめるんだみちるくん・・・桃白白はそんなんじゃ・・・ん、むぎゅ・・・
てなことになることは明明白白桃白白じゃん。会社名と採用担当部署の連絡先を教えてよ、
桃白白はそこに連絡するからさ。御社には桃白白を採用することができるというメリットを
与えました。桃白白は通り一辺倒の受け答えはさせていただきますが、それが難しいときは・・・
その先は言う必要ないですよね。自分で考えてみてください。
0723デフォルトの名無しさん
2012/11/03(土) 14:57:12.76例えばB1にVLOOKUP関数で、A1:A10の範囲から該当する文字列を表示します。
A1:A10の文章の長さはバラバラで、セルの大きさもバラバラなんですが、表示した文章をキレいに表示したいんです。
0725デフォルトの名無しさん
2012/11/03(土) 16:08:27.48Worksheet_CalculateにAutoFit
0726デフォルトの名無しさん
2012/11/03(土) 19:37:03.65折り返して全体を表示するにチェックは入れています。
それでも行幅までは変更されません。この行幅まで自動で調整して全文見えるようにしたいのです。
何か良い方法はないでしょうか。
0727デフォルトの名無しさん
2012/11/04(日) 02:57:09.39指定したセル幅で折り返すための機能なんだから用途が逆
つかExcelは表計算ソフトなんだから
文章を綺麗に表示させたいならワードやパワポ使えよ
確かに便利なんだけどさExcel
0728デフォルトの名無しさん
2012/11/04(日) 05:46:50.06幅じゃなくて高さでした。
作成してるものは計算が主なんでExcelじゃないと駄目なんです。
0729デフォルトの名無しさん
2012/11/04(日) 07:48:25.61この場合、セルに入っている実体は表示データではなく関数だから無理。
高さを広げたい時は、都度手動で行番号の境界をダブルクリックするしかない。
0730デフォルトの名無しさん
2012/11/04(日) 11:59:57.25表示データのLenBを取ってきて所定値との除算結果とCellの高さ基準値を乗算して
調整すればいいじゃん。
もしかしたらもっと簡単な方法があったかもしれないけど忘れた。
0731デフォルトの名無しさん
2012/11/04(日) 19:46:10.740732デフォルトの名無しさん
2012/11/04(日) 19:55:37.210733デフォルトの名無しさん
2012/11/04(日) 20:35:30.250734デフォルトの名無しさん
2012/11/04(日) 20:48:21.98どう違和感を感じるか教えていただけませんか?
わたしはExcelVBAは上級レベルですが、VB.netのことはさっぱりわかりません。
でも今後VB.netを勉強しようと思っています。
0735デフォルトの名無しさん
2012/11/04(日) 21:56:38.80にている様で文法が微妙に違ってます。
あと、DataTableとかの概念がないのがVBA
0736デフォルトの名無しさん
2012/11/05(月) 11:31:31.410737デフォルトの名無しさん
2012/11/05(月) 19:50:33.770738デフォルトの名無しさん
2012/11/05(月) 22:09:03.07仮にそのA1の内容にセル内改行とかあった場合で
そのまま変数にも改行情報を維持したい場合
そういうのって可能でしょうか?
0740デフォルトの名無しさん
2012/11/05(月) 22:27:01.20改行などの初期設定はすべて解除されます
つまり
A1の内容→変数に格納→B1にペーストすると
A1が赤文字や途中で改行とかが入っていてもすべて消えます
0741桃白白
2012/11/05(月) 23:04:07.83改行は設定じゃなくて文字だろ、消えないだろ、これでいけるだろ
Dim s As String
s = Range("A1").Value
Range("B1").Value = s
0742デフォルトの名無しさん
2012/11/06(火) 01:06:25.60普通に操作してそうなるものは当然マクロでやってもそうなるよ
因みに改行はコードな
Windowsだとキャリッジリターン&ラインフィードな
vbCrLfでもChr(13)&Chr(10)でも好きなの使え
なんでこんなんかってのはプリンタ制御コードの話とかになるから自分で調べてくれ
0743デフォルトの名無しさん
2012/11/06(火) 07:16:54.01セル内の改行コードってラインフィードのみじゃなかったっけ?
0744デフォルトの名無しさん
2012/11/06(火) 15:05:43.16複数の画像が縦に並んでいて、シート2からシート1に同じように縦に貼り付けたいです。
マクロで下のような感じなんですが
ActiveSheet.Shapes.Range(Array("Picture 16")).Select
Selection.Copy
Sheets("1").Select
Range("C11").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=4
Selection.ShapeRange.ScaleWidth 0.5472061447, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 0.5472061657, msoFalse, msoScaleFromTopLeft
これをRangeではなく、Worksheets(1).Cells(i, 4)みたいにしてやりたいのですが、どのように書けば良いですか?
単純に上のマクロのRangeの部分を、Worksheets(1).Cells(i, 4).Selectみたいにしてもエラーが出ます。
0745744
2012/11/06(火) 16:25:47.290746デフォルトの名無しさん
2012/11/06(火) 22:34:10.47まぁ、ワシのバックリはすでに良い方法ですけどね(´・ω・`)b
0747デフォルトの名無しさん
2012/11/06(火) 22:34:41.190748デフォルトの名無しさん
2012/11/06(火) 23:27:14.15こーいう宣言がなぜできないのだ?
だからVBAは好きになれない。
0749デフォルトの名無しさん
2012/11/06(火) 23:34:12.490750デフォルトの名無しさん
2012/11/06(火) 23:42:00.020751デフォルトの名無しさん
2012/11/07(水) 11:56:45.21そこのプログラム板に、エクセル97でおーぷん2ちゃんねる専ブラ作ろうよ
というスレを立てておいたので規制されたら遊びに行ってよ
http://toro.open2ch.net/test/read.cgi/tech/1351539027/l50
0752デフォルトの名無しさん
2012/11/08(木) 01:35:39.90サイトだけはまだあったわ 実物はもうないみたいだけど
http://turedure.s8.xrea.com/equal2ch/
ダウンロードして使ってみた記憶はあるので探してみようかな
0754デフォルトの名無しさん
2012/11/08(木) 19:26:14.40業務でそんな事する奴がいたらすぐ首だよ。
0755桃白白
2012/11/08(木) 19:52:36.85おいやめろ、まるで桃白白より文鎮のほうがまだ役に立つみたいなそんなことやめろ。
DimとかAsとかロジックに直接かかわりのないものを排除することによってロジックを際立たせて
さらに最近の風潮としてテストで動作保証しちゃったらいいじゃん的な流れがあるだろ。
つまり桃白白はできるやつってわけ。
0756デフォルトの名無しさん
2012/11/08(木) 19:54:57.290757デフォルトの名無しさん
2012/11/08(木) 21:23:56.340758デフォルトの名無しさん
2012/11/08(木) 21:43:41.49変数の宣言を強制するにチェックを入れておけばいいだけだろ?
0759デフォルトの名無しさん
2012/11/08(木) 22:39:11.025行2列の範囲を選択してテキストファイルにして保存したいんですが,その際に
1.列と列の間にタブでのスペースがある
2.ファイル名に日付と変数を入れたい 例 mm_dd_名前_k
OSはwindows7でexcel2007を使っています
回答して貰えるとうれしいです
0760デフォルトの名無しさん
2012/11/08(木) 23:37:12.53質問するなら質問内容を書けよ
0761デフォルトの名無しさん
2012/11/08(木) 23:50:52.47>>759です
どのようにしたらできますか?
0762デフォルトの名無しさん
2012/11/09(金) 00:20:44.29> 5行2列の範囲を選択して
Range.Selectを使う(そもそも選択する必要性があるの?)
>テキストファイルにして保存したい
FreeFile、Open、Write、Closeを使う
>1.列と列の間にタブでのスペースがある
ある?
>2.ファイル名に日付と変数を入れたい 例 mm_dd_名前_k
日付はどこから取得したいの?
変数を入れたいってどういう意味?
0763デフォルトの名無しさん
2012/11/09(金) 01:36:54.89こういう形にしたいって具体例言ってくれた方が早いんでないの
0764デフォルトの名無しさん
2012/11/09(金) 03:01:56.97str = Cells(a,b) & vbTab & Cells(a,b+1)
とか?
0765桃白白
2012/11/10(土) 08:41:39.09/ ⌒ ⌒ ヽ ,,,
/ ( ●)(●) | /⌒_)
| (__人__) } ノ ノ おいっすー
__. }、. ` ⌒´ 、` /
(⌒ |_,,,ノ
""''''''ヽ_ ┌──┐ |
| ├──┤ |
| ├──┤ |
i  ̄\ ./
\_ |/
_ノ \___)
( _/
|_ノ''
0766デフォルトの名無しさん
2012/11/11(日) 08:11:12.980767デフォルトの名無しさん
2012/11/11(日) 14:55:04.55IF〜ELSEや、FOR〜NEXTなどの
全体でブロックを構成する制御構文は
前後に空行を置いて他のコードと離して書くものですか?
先輩にそうしろと注意されたのですが、行の無駄と思うのですけど。
0768デフォルトの名無しさん
2012/11/11(日) 15:06:02.34宗教みたいなもんだから職場のルールに合わせておけばいいと思うよ
0769桃白白
2012/11/11(日) 15:12:40.59行数を減らせばコードを一覧できる量が増える。空行を入れればコードが
見やすくなる。どちらを選択するかはケースバイケースだけれども、先輩が
空行を入れろと言うんだったら仕方がない。会社で書式をそういうふうに統一
するようになってるんだろ、じゃあそうしたほうがいいだろ、そうするべきだ。
count = 1
For i = 1 To count
ほげらちょ
Next
桃白白ならブロックに関連する処理もひとまとめにしちゃうけど。
0770デフォルトの名無しさん
2012/11/11(日) 15:13:34.360771デフォルトの名無しさん
2012/11/11(日) 15:36:24.79プログラムソースは何百何千行と書くものなんだから
1行や2行の空白行を気にするだけ無駄。
0772デフォルトの名無しさん
2012/11/11(日) 18:04:19.84先輩に注意されたなら理由は先輩に聞け
0773デフォルトの名無しさん
2012/11/11(日) 20:55:55.500774デフォルトの名無しさん
2012/11/11(日) 21:32:37.96マルチステートメントで極限まで1行に詰め込んでやれ
0775デフォルトの名無しさん
2012/11/11(日) 22:20:14.440776デフォルトの名無しさん
2012/11/11(日) 23:52:42.38時代で変わるならまだしも、作った人によって違うとか
後で保守する人が地獄見るからやめような?
0777デフォルトの名無しさん
2012/11/12(月) 13:21:27.32処理の区切りで空行やコメントを入れるべきであって
>>769でいうならcount = 1を切り離すべきじゃない
空行がもったいないという理由はおかしい
印刷するなら紙がもったいないと言えるが
そうではなく重要なのはモニタで見る時に、
スカスカのコードだと見えない部分を記憶しなきゃいけないということだ
作った本人は当然知ってるのだから気にしないが
人のプログラムなら、モニタにはみだした部分を記憶する必要がある
記憶しなくたってスクロールすればいいってか?
スクロールして見て、戻ったときに記憶してるではないか
という訳で朝鮮人は皆殺しにする必要があることがお分かり頂けたろうか
0778デフォルトの名無しさん
2012/11/12(月) 13:55:23.38変数countでループの最大値を指定していると言う事は、count = 1はループと切り離しておいても問題ない
変数countが、どういう意図を持っているのかはコメントしておかなければならないと思うけどな
0779デフォルトの名無しさん
2012/11/12(月) 19:08:13.36変数i →count
変数count →max
が妥当。個人的にはこれでもNGだが。
ループの変数であっても一文字変数はバグの元。
0780デフォルトの名無しさん
2012/11/12(月) 19:17:17.92俺ならこうする。
変数i →count → cnt
変数count →max → maxcnt
0781桃白白
2012/11/12(月) 19:22:40.53おいやめろ、まるで桃白白が書いたプログラムがバグだらけみたいな、そんなことを
いうんじゃない。グローバル変数や引数はまた別だけどさ、桃白白の経験上ローカル変数は
長くしてもプログラムが見づらいだけの気がするわ。桃白白だったらcountもcntと略したりcに
したりしちゃう。桃白白なら平気でやっちゃう。そのほうが全体のロジックがわかりやすい。
真似してくれてもいいよ?桃白白に倣って今日から心を入れ替える気があるなら桃白白の真似しちゃってもいいよ?
0782デフォルトの名無しさん
2012/11/12(月) 19:30:47.83とりあえず初心者はMSのルールに則って命名しておけばいいと思うよ
http://msdn.microsoft.com/ja-jp/library/cc375956.aspx
0783デフォルトの名無しさん
2012/11/12(月) 19:53:44.53>人のプログラムなら、モニタにはみだした部分を記憶する必要がある
>記憶しなくたってスクロールすればいいってか?
なら、マルチウィンドウを活用したらいいのに。
まあ、それはそれで不便だが。
結論は776だよな。
まあ、767が書いたコードが再利用されることなく短期間でお蔵入りになる予定なら、
それも保守すら必要とされないような短期利用・一時利用の、767本人以外が触らないようなコードならともかくだ。
職場の、他の人が保守したり再利用したりすることが想定される以上は、
その職場内でコード記述法、基本的書式を統一しとかないとバグの温床になるだろう。
0784デフォルトの名無しさん
2012/11/12(月) 22:32:20.92Forに i j k を使うのは50年以上前から続く伝統(当初は大文字だったけど)
意味がわからないのは単なる勉強不足
世の中にある無数のコードですでに使われてるから今さら否定してもしょうがないし
他人の書いたコードを読むにはこういう知識も必要
逆に i 以外が使ってあると、特別な意味があるのかと思ってしまう
0785デフォルトの名無しさん
2012/11/12(月) 23:37:23.61分からなくなるほど行数のあるループ作るやつはプログラマ辞めてくれ
スコープの狭い変数は短い変数名でOK
ループ変数にiを使うとか常識
I〜Nは暗黙の整数だろ学校で何勉強してきたんだ
0786デフォルトの名無しさん
2012/11/12(月) 23:54:19.170787デフォルトの名無しさん
2012/11/12(月) 23:57:14.700788デフォルトの名無しさん
2012/11/12(月) 23:58:45.89いつまでスレチの話してるんだ
0789デフォルトの名無しさん
2012/11/13(火) 01:40:56.510790デフォルトの名無しさん
2012/11/13(火) 07:38:12.440791デフォルトの名無しさん
2012/11/13(火) 09:18:17.10今時FORTRANかよ...
0792デフォルトの名無しさん
2012/11/13(火) 09:38:51.52For i = 1 To ***ならいいんだが
0793デフォルトの名無しさん
2012/11/13(火) 13:04:22.44シートの一行目に必ず列のタイトルがあるという前提で
ColRange(”列タイトル”, myWorkSheet).(消したり切ったり貼ったりその他色々)
(数十行似た処理が続く)
Private Function ColRange(ByVal 列タイトル As String, ByRef TargetSheet As WorkSheet) As Range
Set ColRange = TargetSheet.Colmns(TargetSheet.Rows(1).Find(”列タイトル).Colmn)
みたいな感じで、列を取得して処理をかけていくみたいなマクロがあるんですけど、ColRange以下略が長ったらしいので
With myWorkSheet
.ColRange(”列タイトル”).処理
以下略
End With
みたくできないかと思ったんですけど、クラスとかメソッドとか使えばいけるんですかね?
ググっても見つけられなかったもんで…
0794デフォルトの名無しさん
2012/11/13(火) 13:23:28.06ColRange()はExcel VBAの機能ではなく、あなたの周りの誰かが作ったユーザ関数。
なので、With ... .ColRange()という使い方はできない。
また、その関数は二つの引数を必要としているので、それを省略することはできない。
ではどう書けば良いかというと、
Set myRange = ColRange(”列タイトル”, myWorkSheet)
myRange.(消したり切ったり貼ったりその他色々)
...
あるいは、
Set myRange = ColRange(”列タイトル”, myWorkSheet)
With myRange
...
End With
0795デフォルトの名無しさん
2012/11/13(火) 14:10:17.50ありがとうございます。
誰かが自作したというのはなんとなくですがわかりました。
で…やっぱり書き方が悪かったと思うんですが、
ColRange(”列タイトルその1”, myWorkSheet).なんか色々処理
ColRange(”列タイトルその2”, myWorkSheet).なんか色々処理
って感じで列タイトルの部分も毎行変わります…
0796デフォルトの名無しさん
2012/11/13(火) 14:45:30.06ColRangeのI/Fが気に入らないならColRangeのラッパーを作るとか
そもそもの理由が「長ったらしい」じゃ説得力がなさすぎて助言しにくい
0797デフォルトの名無しさん
2012/11/13(火) 15:29:15.65なら、シート毎のマクロとして
function myColRange(byval title as string) as range
return colrange(title, thisworksheet)
end function
として(ただし、実行するシート全部にこのマクロが必要)、
myColRange("abc").何か
myColRange("def").何か
とするのがいいかな。
あるいは、クラスを作って、コンストラクタにworksheetを渡して、GetColRange(byref title as string)という
メソッドを作り、呼び出し元では、
set obj = new Hoge(thisworksheet)
obj.ColRange("abc").何か
obj.ColRange("def").何か
とするかのどちらかな。といっても、こっちの方は多分理解できないと思うけど。
0798デフォルトの名無しさん
2012/11/13(火) 17:06:02.83なんかほんともう、すいません…
ラッパーというのがどんなものか、ちょっとわかったような気がします。
クラスとかコンストラクタとかの方法が、一番自分がやってみたいことに近いと思うので、これから勉強してみます。
単純に「気に入らない」「やってみたい」でお騒がせしてしまい、申し訳ありませんでした。
0799デフォルトの名無しさん
2012/11/13(火) 17:17:43.22> 単純に「気に入らない」「やってみたい」でお騒がせしてしまい、申し訳ありませんでした。
いやいや、これがプログラミングスキルを伸ばすために必要なことなんだよ。
プログラマの三大美徳:
・怠慢(Laziness)
・短気(Impatience)
・傲慢(Hubris)
http://itpro.nikkeibp.co.jp/article/Watcher/20061005/250057/
0800桃白白
2012/11/14(水) 14:48:37.08(*‘ω‘ *) ちんぽっぽ
( )
v v
ぼいんっ
川
( ( ) )
0801デフォルトの名無しさん
2012/11/17(土) 20:07:45.90って条件でループを組みたいのですがうまくいきません
If Cells(1, i) = 1 And (Not Cells(1, 3)) Then
ここでエラーになります
0802デフォルトの名無しさん
2012/11/17(土) 20:15:36.43Worksheets(1)のC列が収入でD列が支出、E列が残高です。金額は2行目から32行目までに打ち込みます。
元々はセルに直接数式を入れていたのですが、それだと誤ってDeleteキー押したときに数式が消えてしまうのでVBAで処理しようと思いました。
VBAの入門書等を参考に書いてみたのですが、思ったように動くコードが書けなく、おかしな所も発見出来なかったのでご教示お願いします。
0803デフォルトの名無しさん
2012/11/17(土) 20:16:58.57If Cells(1, i) = 1 And i <> 3 Then
0804デフォルトの名無しさん
2012/11/17(土) 20:18:10.19Formulaを使う。
0805802
2012/11/17(土) 20:18:54.45Sub soukei()
With Worksheets(1)
Range("C33").Formula = "=SUM(C2:C32)"
Range("D33").Formula = "=SUM(D2:D32)"
Range("E33").Formula = "=C33-D33"
End With
End Sub
0806802
2012/11/17(土) 20:21:11.86Sub zandaka1st()
With Worksheets(1)
Range("E2").Formula = "=IF(AND(C2="",D2=""),"",C2-D2"
Range("E3").Formula = "=IF(AND(C3="",D3=""),"",E2+C3-D3"
Range("E3:E32").FillDown
End With
End Sub
0807デフォルトの名無しさん
2012/11/17(土) 20:22:22.23with を使ってるのに、Rangeの前に . (ピリオド) が無いのはなぜ?
0808802
2012/11/17(土) 20:25:07.32Sub zandaka2nd()
… With Worksheets(1)
……If Range("C2,D2") <> "" Then
………Range("E2").Formula = "C2-D2"
……End If
…Dim cnt As Long
……For cnt = 3 To 32
………If Cells(cnt, 3) <> "" Then
…………If Cells(cnt, 4) <> "" Then
……………Cells(cnt, 5) = Cells(cnt - 1, 5) + Cells(cnt, 3) - Cells(cnt, 4)
…………End If
………End If
……Next cnt
…End With
End Sub
0809802
2012/11/17(土) 20:27:48.370810802
2012/11/17(土) 20:34:14.74また、OSはWindows 7 Home Premium 64bitの Service Pack 1でした。Excelは2007で間違いありません。
0811デフォルトの名無しさん
2012/11/17(土) 20:45:02.98……If Range("C2,D2") <> "" Then
これはなんだろう?
この表記だと"D2"セルの値は判定に影響しないよ。
あと、結果が思ったように行かないのであれば具体的にどのセルの出力結果が
思ったのとどのように違うのか教えて。
0812デフォルトの名無しさん
2012/11/17(土) 20:54:02.48ありがとうございます!
0813802
2012/11/17(土) 20:55:37.410814デフォルトの名無しさん
2012/11/17(土) 21:07:36.44E2セルに着目すると、
[>>811]の判定がおかしいのと、
………Range("E2").Formula = "C2-D2"
「=」を忘れてる
0815802
2012/11/17(土) 21:08:22.48C2とD2の両方が空白の時はE2は空白にし、そうでないときはC2からD2を引き、E2に残高を入れる。としたかったのです。
0816デフォルトの名無しさん
2012/11/17(土) 21:12:09.49>C2とD2の両方が空白の時
これを実現する判定文は
If Range("C2") <> "" and Range("D2") <> "" Then
0817802
2012/11/17(土) 21:42:19.18そのような書き方が正しいのですね。イコールを直し、Ifも直してやってみたら、
C2とD2両方に値がある時、E2に式"C2-D2"が入り、E2に計算結果が出るようにはなりました。
ですが、E3からE32の間ではC3とD3両方に値が入っている時、コードを実行すれば計算結果はちゃんとE3に出るのですが、
その状態でC3やD3の値を変えても、残高であるE3には即時に反映はされず、そのままです。
コードを実行すると変更後の値で再計算されるのですが、これをC3やD3の値を変えた直後に再計算されるようにはできないのでしょうか。
何故かE2ではC2やD2を変えた直後に自動で再計算されE2に反映されます。
0818802
2012/11/17(土) 21:51:16.81それと、E3以降E32までですが、C3とD3に値を入れただけだと計算されずコードを実行するまでE3は空白のままななのですが、
これをC3とD3両方に値を入れた直後に計算させる事は出来ないのでしょうか。これが解決できれば>>817のも解決できると思ったのですが。
0819デフォルトの名無しさん
2012/11/17(土) 22:16:39.220820デフォルトの名無しさん
2012/11/17(土) 23:52:39.95Deleteキー押したときに数式が消えてしまうのを防ぎたいなら保護すればいいんじゃないの?
目的と手段がごっちゃになってない?
0821デフォルトの名無しさん
2012/11/18(日) 08:56:19.56If Cells(1, i).Value = 1 And Cells(1, i).Value<>Cells(1, 3).Value Then
だが、Andを使うコードは汚いし両方を評価するから無駄だ
Ifのネストをつかえ
temp1 = Range("C1").Value
For Each c In Range("A1:Z1")
temp2=c.Value
If tem2 = 1 Then
If temp2 <> temp1 Then
処理
End If
End If
Next
0822デフォルトの名無しさん
2012/11/18(日) 12:16:15.660823デフォルトの名無しさん
2012/11/18(日) 12:38:50.30たった26回のループで評価のコストとか誰もが無視するレベル
0824デフォルトの名無しさん
2012/11/18(日) 13:10:09.44Workbooks.add
だと、3つもシートが作られるのがイヤだし。
かといって
Activesheet.copy
ではシートは1個だけどそのシートに元シートのデータがそのままだし。
0825デフォルトの名無しさん
2012/11/18(日) 13:15:23.80何がしたいのかが書いてないから外してるかもしれんが
Application.SheetsInNewWorkbook
0826デフォルトの名無しさん
2012/11/18(日) 13:16:50.81Application.SheetsInNewWorkbook = 1
で、次から新規作成されるブックのシート数の設定を変更できる。
マクロの最後で3(もしくは初期値)に戻せばおk
0827824
2012/11/18(日) 13:21:33.00Workbooks.add sheet:=1
みたいなのでできないの?
0828824
2012/11/18(日) 13:23:48.73Aheets.Add
Activesheet.move
とすることにしたよ。
0829824
2012/11/18(日) 13:24:49.060830デフォルトの名無しさん
2012/11/18(日) 13:26:07.63失礼なやつだな。
回答をもらう身で、めんどいとか役に立たないとか。
あぼーんするからコテ付けろ。
0831桃白白
2012/11/18(日) 13:51:54.97感謝の気持ちを表すのに憎まれ口を叩きたくなる年頃なんだろ。
思い返せば桃白白にもそんなときがなかった。よくよく考えてみたけど桃白白は昔から素直でいいやつ。
0832デフォルトの名無しさん
2012/11/18(日) 14:15:00.01Ifのネストを使えってのは同意するが>>821は質問の取り違えかと
>>801でエラーになるってことはC1に文字列でも入ってるてことだよな
0833デフォルトの名無しさん
2012/11/18(日) 15:02:50.54まとめれば自画自賛ってやつですね
0834デフォルトの名無しさん
2012/11/18(日) 16:48:54.76Workbook.Add xlWBATWorksheet
0835デフォルトの名無しさん
2012/11/18(日) 17:00:11.25ダミーデータが大量にはいったデータベースってどこかで手に入りませんか?
フィルター機能、日付処理、シート処理、ブック処理、その他いろいろ含め、いろんな作業を実体験したいから
数千、数万行もエントリーのある巨大データベースが欲しい。
中身はなんでもよい。
0836デフォルトの名無しさん
2012/11/18(日) 17:08:27.37普通はシート三つで全然困らないからね。
あまり需要のない作業に関する質問には
回答も付きにくいものさ。
0837デフォルトの名無しさん
2012/11/18(日) 17:14:55.72自習の一環としてダミーデータをInsertするSQLをつくってみたら
0838デフォルトの名無しさん
2012/11/18(日) 17:16:42.03それを作る過程そのものが勉強になるじゃないか!
0839デフォルトの名無しさん
2012/11/18(日) 17:32:58.380840デフォルトの名無しさん
2012/11/18(日) 17:44:33.09日本の街区データとかいいぞ。
そのまま実用にも使える
0841デフォルトの名無しさん
2012/11/18(日) 19:57:35.70毎日、体重と血圧と体温を測ってデータベース化すれば?
0842デフォルトの名無しさん
2012/11/18(日) 20:01:26.801万件のデータを集めるのに1万日=27年か
0843デフォルトの名無しさん
2012/11/18(日) 22:00:51.17もはやVBAってよりSQL他になる気がするけど
0844デフォルトの名無しさん
2012/11/18(日) 23:20:31.07くくっ
今の健康が、いつまでも続くと思うなよw
0845デフォルトの名無しさん
2012/11/18(日) 23:43:48.30最近、身内か知り合いで人が死んだか?
0846デフォルトの名無しさん
2012/11/19(月) 00:17:18.89例えば、ランダムな数値や文字列を作成してぶっこむコードを作るとか。
上で散々同じこと書かれてるけど本当に勉強になるからやってみた方がいいよ。
0847デフォルトの名無しさん
2012/11/19(月) 00:54:39.63しかも大体用意してやるとこれじゃダメって言い出すんだよ
サンプルなんざ腐るほど転がってるし自分で探せと言いたい
0848デフォルトの名無しさん
2012/11/19(月) 01:15:54.71ランダム関数とか適当にこさえた辞書とか使って顧客番号から住所氏名その他のダミーデータ作って渡したら、
「ダミーデータ作れって言っただろ!! 顧客の個人情報引っ張ってくんな!!」
ってえらい怒られたことがあったな。
じゃあ電算担当側で勝手に作って下さい、あとちゃんと個人情報かどうかチェックしてから言ってます?って訊いたら「もういい」って電話切られて、そのあとなんも音沙汰ないし…
0849デフォルトの名無しさん
2012/11/19(月) 02:41:14.81間違いを認めて謝ることを知らない
0850デフォルトの名無しさん
2012/11/19(月) 03:08:32.84大きな部屋を占領してると偉くなった気になるのは確か
>>848
ちゃんと「いえ、あれは自作したダミーです」って言えよ
自分が正しくても、嫌味っぽく言い返しちゃうのは完全に相手と同レベルだから社会人失格だよ
仕事切られて当然
0851デフォルトの名無しさん
2012/11/19(月) 03:35:08.67とかじゃなくて、
いきなり怒ってきたんだろ?
そりゃだめじゃん。
0852デフォルトの名無しさん
2012/11/19(月) 03:37:02.610853デフォルトの名無しさん
2012/11/19(月) 03:48:45.52むしろそういう時ほど冷静に対処しなきゃ、状況が悪くなるだけってわからないかな
0854デフォルトの名無しさん
2012/11/19(月) 06:44:35.27若いなw
相手に本番データと勘違いされるようなデータを作ったのは君なのだから、
まずは素直に詫びなきゃならん。紛らわしくて申し訳ないと。
しかしあれだな、ダミーデータと言えば、普通は住所XXX、氏名YYYみたいな
ものにすると思うが、どんだけリアルなもの作ったんだよ。
0855デフォルトの名無しさん
2012/11/19(月) 06:49:39.50それがどうかしましたか?
0856デフォルトの名無しさん
2012/11/19(月) 09:46:35.64ダミーデータだから、本番データに近い物を作らなきゃ駄目なんじゃないの?
0857デフォルトの名無しさん
2012/11/19(月) 09:59:10.93使う文字の種類
「これこれの条件で」
示されていれば問題ない
大抵の場合「適当な」ってのがあいまいで
ほんとに適当にやると怒られる
0858デフォルトの名無しさん
2012/11/19(月) 10:39:01.92自分以外の人がどうなろうと自分には関係ない、そうは思わないか?
くくっ
今の健康が、いつまでも続くと思うなよw
症状の軽い病気ほど重症化しやすいんだぜw
0859デフォルトの名無しさん
2012/11/19(月) 10:56:32.04最近、身内の軽めの病気の人が重症化して死んだのか?
0860デフォルトの名無しさん
2012/11/19(月) 10:57:44.01わかります
0861デフォルトの名無しさん
2012/11/19(月) 13:54:07.63症状の重さと病気の重さは、全く別物なんだぜぇ
くくっ
今の健康が、いつまでも続くと思うなよw
0862デフォルトの名無しさん
2012/11/19(月) 19:37:19.66あまりに処理が遅いので CTR+Pause で中止させると
必ずFind処理のところで停止するのですが、そういうものでしょうか?
そして必ず検索に失敗して Nothing が返ってきてしまいます。
0863デフォルトの名無しさん
2012/11/19(月) 19:47:40.86「必ず」Find処理のところで停止する
のならそういうものって事でしょうね
0864桃白白
2012/11/19(月) 21:32:11.27犬も歩けば棒に当たるという言葉がある。それは連綿と続く日本の歴史の中で古く
昔から語り継がれているものだ。あまりに語り継がれているがゆえにことわざと
いわれる。犬も歩いていれば棒にあたるし、処理をしていればFind処理のところにも
くるだろ。つまりあれだろ、まあそういうことだろ、うん。Find処理のところで実行が停止されたとき
Find処理は完了してないから、検索が失敗するのはしかたない。桃白白的に見てもそれは
しかたない。Find処理のところで停止するのは偶然なんじゃね、もしくは必然なんじゃね。
Find処理に時間が超かかっていて実行の停止をしたときにそこで停止する確率が高いか、
または実行を停止するやつの脳内クロックとエクセルがシンクロしてるんだろ。
ふう、疲れた、長文書くの超疲れた。役に立ったっしょ?桃白白のアドバイス。
0865デフォルトの名無しさん
2012/11/19(月) 23:23:36.22別に無理しなくてもいいんじゃね?
0866デフォルトの名無しさん
2012/11/20(火) 11:22:47.44駅で違う電車に乗って分かれるのですが、どちらも10分間隔なのにほぼ友達の方が先に来ます。
何故なんでしょうか。
ってことかな。
0867デフォルトの名無しさん
2012/11/20(火) 20:08:14.70途中中断しなければNothingは返ってこないので、
根気よく処理が終了するまで待つことにします。
0868桃白白
2012/11/20(火) 23:32:16.09検索処理を高速化すればいんじゃね。どういう検索をしてるんだ? 無理なのか?
0869デフォルトの名無しさん
2012/11/21(水) 01:32:07.47それがExcelを使った処理の限界だよ
それ以上はAccessに変えるなりDB使うなりを考えなよ
0870デフォルトの名無しさん
2012/11/21(水) 06:03:54.27数千行あるソースSheetを上から順番に読み込み、
A列にある文字列と一致する行を、
これまた数千行あるデータSheetからFindで検索。
一致する行があればその行に、無ければ新規行に書き込み。
簡単にこのような処理です。
CopyDestinationを用い、1回ごとに書き込みをする方法と
書き込むデータは配列で格納し、
最後に1回だけ書き込む方法を試しましたが
速度的には変化ないようでした。
0871デフォルトの名無しさん
2012/11/21(水) 07:22:57.260872桃白白
2012/11/21(水) 13:38:50.51ソレダ!! m9(・∀・)ビシッ!! ナイスアイデア!イカスアイデアだな!
そもそもイカスの語源ってなんなんだ。まさか下ネタじゃないないだろ、
イカのように素敵ということか、イカが素敵という価値観は一般的に
共有されるものじゃないと思うの、桃白白はそう思うの。Dictionaryの話に
戻ってもいい?桃白白べつにイカの話をしたいわけじゃないからさ。
文字列が全体一致で検索されているならDictionaryを試してみるべきだな。
>>870
文字列を全体一致で検索してるならDictionary使っちゃいなよ。
0873デフォルトの名無しさん
2012/11/21(水) 16:38:51.60Activecell.CurrentRegion.AutoFilterは
同じですか?
0874デフォルトの名無しさん
2012/11/21(水) 20:25:11.90なぜ
Activeworkbook.Copy
でできないの?
シートなら
Activesheet.Copy
でできるのに。
0875874
2012/11/21(水) 20:25:44.36ブックをコピーして新ブックを作りたいときはどうしたらいいの?
0876デフォルトの名無しさん
2012/11/21(水) 21:20:51.55探す前にちょっと整理とかできないデータなのか
ていうか、数十万行ならともかく数千行って大した量じゃないように思うんだけど、
再計算とかちゃんと停止してる?
0877デフォルトの名無しさん
2012/11/21(水) 21:23:06.91仕様の疑問はメーカーサポートへどうぞ
我々ユーザにはわかりません
0878デフォルトの名無しさん
2012/11/21(水) 21:32:30.80ActiveWorkbookが返すWorkbookオブジェクトにCopyメソッドがないから
>>875
SaveAsメソッドとかSaveCopyAsメソッドとか使う
もしくは元のファイルをコピーする
0879デフォルトの名無しさん
2012/11/22(木) 01:24:10.93単純に考えろよExcel自体にブックをコピーして新ブックを作るなんて機能ねーだろ
>>878が言うように、別名で保存したりファイル自体をコピーしたりしてるだろ
Excelの機能を使ってるものはExcel以上の事はできないからな
やりたければ普通にVBAで作れ
0880桃白白
2012/11/22(木) 05:25:12.12| |(. .)|
|  ̄ ̄~ ̄ ̄
| ∩___∩
:::| ノ ヽ ヽ
:::/ _ _ | 暇だお
::| (_●) ミ
:彡、 |Ч i`ヽ
:/ _/「 ̄Y ̄」> |
:|ヽ  ̄ ̄)( ̄ .ノ
C T ̄| ̄ 「__
/`―、___)__)
;;;;;;;;;; ;;;;;
0881デフォルトの名無しさん
2012/11/22(木) 07:16:38.24ありがとう。Dictionaryってやつは初めて知りました。
しかしDictionaryを用いるのはどうも難しそうです。
ソースSheetから読み出す情報は、その行の特定複数列ですし、
書き込む時も特定複数列に書いています。
また検索に使用する文字列は重複も多くありますので。
>>876
>再計算とかちゃんと停止してる?
申し訳ない↑の意味が理解できなかった。
再計算を停止?
0882デフォルトの名無しさん
2012/11/22(木) 07:32:10.81自動再計算の停止
Application.Calculation = xlManual
再計算実行
Calculate
自動再計算の再開
Application.Calculation = xlAutomatic
0883デフォルトの名無しさん
2012/11/22(木) 09:32:19.24Findで総当たり検索は駄目だな
エクセラーはアルゴリズムくらい勉強したほうがいい
ソートして上からなぞるように検索すれば総当たりなんてしなくて済む
数万データまでならアルゴリズム無知のサルでも使えるDictionaryでもいいと思うけど
ちなみに数十万以上ならDictionaryは遅い部類に入るから万能じゃないことは知っておくべきだ
0884デフォルトの名無しさん
2012/11/22(木) 09:38:34.53しかしたった数千で時間がかかるのも不思議だな
万に近い数千なのかな?
0885デフォルトの名無しさん
2012/11/22(木) 10:00:36.06覚えればアルゴリズムとか考える力のない馬鹿でも使えるし
0886デフォルトの名無しさん
2012/11/22(木) 10:02:15.870887デフォルトの名無しさん
2012/11/22(木) 10:45:45.12ソートして上からなぞる→O(n)
Dictionary→O(1)
0888デフォルトの名無しさん
2012/11/22(木) 13:00:31.93馬鹿の一つ覚えの人は万能だと思っているが
0889デフォルトの名無しさん
2012/11/22(木) 13:16:25.06一瞬でそ
0890デフォルトの名無しさん
2012/11/22(木) 13:37:56.80確かにデータ量が多くなるとDictionaryを構築する時間は線形時間よりもかかるようになってくるが、
検索はO(1)だと思ったがそれも違うのか?
手元で試したら、50万件のdictionaryでランダムなkeyを1万回検索したら、969ms、
50万件のソート済み配列で、順次1万回検索したら、160656ms。
まあ、ソート済みなんで、配列だと普通は他の探索法取るんだろうけど。
0891デフォルトの名無しさん
2012/11/22(木) 13:42:56.61そこがきっと抜けてると思ったよ
ちなみに6文字から9文字のランダムなアルファベットで10万アイテムで0.3秒でも100万アイテムだと3秒とはならず46秒となった
0892デフォルトの名無しさん
2012/11/22(木) 13:52:34.48> そこがきっと抜けてると思ったよ
いや、ちゃんと線形時間よりはかかるようになるって書いてるでしょ。
> ちなみに6文字から9文字のランダムなアルファベットで10万アイテムで0.3秒でも100万アイテムだと3秒とはならず46秒となった
100万要素のDictionaryに対して、6文字から9文字のランダムなアルファベットを1万回検索するのにかかる時間と、
ソート済みの100万要素の配列に対して、6文字から9文字のランダムなアルファベットを順次検索するコード書いて
それにかかる時間比べてみ?
0893デフォルトの名無しさん
2012/11/22(木) 13:56:05.74dictionaryを26個用意すれば、データ構築にはほぼ0.3*10秒で終わるよね。
0894デフォルトの名無しさん
2012/11/22(木) 13:59:22.85じっくり考えればそんなに難しくない
ちょっと高度になると番兵を使ったりするんだがwikiによると最近は番兵は使わないほうが多いらしい
0895デフォルトの名無しさん
2012/11/22(木) 14:01:54.92100万人分の名簿のダミーデータだと思ってくれ
意味分かったかな?
0896デフォルトの名無しさん
2012/11/22(木) 14:08:13.70>wikiによると
kwsk
0897デフォルトの名無しさん
2012/11/22(木) 14:09:15.770898デフォルトの名無しさん
2012/11/22(木) 14:10:12.62> 意味分かったかな?
いや、全然意味わかんないんだけど。
検索する回数が多いなら、データ構築に数十秒くらいかかっても全然大丈夫かもしれないし、
それも許容できないなら、なんらかのアルゴリズムでパーティショニングすれば劇的にデータ
構築時間が減る。
VBから簡単に使える、バルクロードできるデータベースがあるなら、そっちを使うのがいいかも
しれないし、まあケースバイケースだよ。
まあそれはいいんだけど、これやってみてよ。
> 100万要素のDictionaryに対して、6文字から9文字のランダムなアルファベットを1万回検索するのにかかる時間と、
> ソート済みの100万要素の配列に対して、6文字から9文字のランダムなアルファベットを順次検索するコード書いて
> それにかかる時間比べてみ?
0899デフォルトの名無しさん
2012/11/22(木) 14:11:00.14そうなのか・・・
ExcelVBAのTips系のwikiがあるのかと思ってしまった
0900デフォルトの名無しさん
2012/11/22(木) 14:16:58.82> ちょっと高度になると番兵を使ったりするんだがwikiによると最近は番兵は使わないほうが多いらしい
いったいどの項目にそんなこと書いてるのか知らないけど、ソート済みの配列に対する検索は、
バイナリサーチがメジャーな方法。O(log2 n)。
0901デフォルトの名無しさん
2012/11/22(木) 14:18:56.00おめーがやれよ
俺はそういうのはもう飽きるほどやってる
もちろんソート済みアルゴリズムには番兵使ってチューニングしてる
0902デフォルトの名無しさん
2012/11/22(木) 14:21:02.200903デフォルトの名無しさん
2012/11/22(木) 14:23:38.37おめー馬鹿か
両方ともソートすると別のアルゴリズムがあるんだよ
二分探索しか知らないなら黙っとけ
0904デフォルトの名無しさん
2012/11/22(木) 14:33:00.14> 両方ともソートすると別のアルゴリズムがあるんだよ
まあそのアルゴリズムより、ハッシュによる検索の方が多分速いんだけどね。
0905デフォルトの名無しさん
2012/11/22(木) 14:36:00.43100万でやってみたら?
検索時間じゃなくてほとんど構築時間になってしまうけどな
0906デフォルトの名無しさん
2012/11/22(木) 14:37:20.38は?
君の環境で46秒で終わったんでしょ?
0907デフォルトの名無しさん
2012/11/22(木) 14:39:54.78データ構造を構築する必要なんてなんだよね。
俺が言ってる意味わかる?
0908デフォルトの名無しさん
2012/11/22(木) 14:40:38.78正:必要なんてないんだよね。
0909デフォルトの名無しさん
2012/11/22(木) 14:47:53.80Dictionaryの構築時間の話ね
検索は速いけど前準備のDictionary構築の時間がほとんどって意味
0910デフォルトの名無しさん
2012/11/22(木) 16:49:39.03庶民の味方だよホントググってみ
0911デフォルトの名無しさん
2012/11/22(木) 17:47:10.46Dictionaryってデータ多いと構築時間ばかりじゃなく検索時間も同様に遅いのね
どっちも同じデータの100万と100万で試すと格納に46秒で検索に46秒で計92秒かかったわ
まぁ昔からデータ多い時にはDictionaryは使うなってのは言われてるよな
Excel2003では6万ちょっとだから問題にならなかったってだけで
ちなみにCollectionだと11秒
これでも十分に遅いけど
0912デフォルトの名無しさん
2012/11/22(木) 18:33:37.040913デフォルトの名無しさん
2012/11/22(木) 18:43:27.80そんな定数ないぞ
vbCrLfのことか?
0914デフォルトの名無しさん
2012/11/22(木) 18:43:53.06vbCrLfだろ CrLfじゃなくて
で、使えなくなったってのはどういうこと?
0916桃白白
2012/11/22(木) 19:03:06.48Dictionaryは、後に入れたもののほうが、先に入れたものより速く取得できるな。
Dictionaryの実装はハッシュテーブルだとばかり思ってたけれど、もしかしてあれか、
スタックを線形探索してるだけなのかこれ。だとしたらかっけーな。桃白白ほれちゃいそう。
0917デフォルトの名無しさん
2012/11/22(木) 20:08:11.70おう!そうか知らんかったわ
100万データを前半50万と後半50万で試したら34秒と10秒だったわ
0918デフォルトの名無しさん
2012/11/22(木) 21:03:40.270919デフォルトの名無しさん
2012/11/22(木) 21:20:02.06ハッシュテーブルだろうけど
ハッシュがかち合えば単なるリストになる他ない
0920デフォルトの名無しさん
2012/11/23(金) 00:02:29.660921デフォルトの名無しさん
2012/11/23(金) 01:03:32.590922デフォルトの名無しさん
2012/11/23(金) 07:59:49.34ちゃんとなんのDictionaryなのか明示しようぜ
で、たぶんScripting.Dictionaryだろうけど、これホントにハッシュテーブルじゃないのか?
どっかにちゃんとした資料ないか?
0923デフォルトの名無しさん
2012/11/23(金) 08:08:28.89辞書は辞書であることに意味があり
実装がどのようになっているかを議論することは
このスレの範疇を超えていると思うが。
0924デフォルトの名無しさん
2012/11/23(金) 08:16:53.45高速化もこのスレの範疇ではないってか?
それともScripting.Dictionaryの話はスレ違いだと?
0925デフォルトの名無しさん
2012/11/23(金) 08:21:07.490926デフォルトの名無しさん
2012/11/23(金) 08:24:33.54辞書が遅いので困っていますという質問が
投稿されたならばありかも知れんが、
辞書の話題から派生した雑談を広げまくっているだけじゃないか。
0927デフォルトの名無しさん
2012/11/23(金) 09:37:54.670928デフォルトの名無しさん
2012/11/23(金) 09:53:00.66やりたければ適切なスレでやってくれ
0929デフォルトの名無しさん
2012/11/23(金) 10:10:04.14**の一つ覚えの人は特にw
しかしDictionaryオブジェクトを辞書っていうのはなんか違和感があるね
0930デフォルトの名無しさん
2012/11/23(金) 10:16:12.040931デフォルトの名無しさん
2012/11/23(金) 10:18:45.350932デフォルトの名無しさん
2012/11/23(金) 10:21:25.480933デフォルトの名無しさん
2012/11/23(金) 10:27:20.49選択クエリとか不一致クエリとかの内部のアルゴリズムなど何にも分からなくても使えるんだし
0934デフォルトの名無しさん
2012/11/23(金) 10:41:19.20Transpose関数と併用してる人を見ると大丈夫かよって思う
0935デフォルトの名無しさん
2012/11/23(金) 11:11:55.58最大データ数、許容処理時間、推奨環境などなど、
質問に書かれてない条件をどう設定するかは回答者の自由
0936デフォルトの名無しさん
2012/11/23(金) 11:15:11.94知らないだけだったりして
0938デフォルトの名無しさん
2012/11/23(金) 19:33:17.21さらにフィルターは、「指定の値で始まる」にしたいんです(つまりワイルドカードが最後についたような「てすと*」みたいなもの。)。
これはどうやったらできますか?
Criteria1で配列変数にしてみたんですが、これだとワイルドカード式のフィルターができません。
(この質問を理解できるのはかなりVBAに精通してる人のみだと思いますが)
0939デフォルトの名無しさん
2012/11/23(金) 19:53:17.79マクロの記録で、あっさり記録できたからそれを使えばいいだけだと思う。
>(この質問を理解できるのはかなりVBAに精通してる人のみだと思いますが)
むしろド素人のほうが向いてる質問だね。
0940938
2012/11/23(金) 20:01:45.55あなたは質問の意味が分かっていませんね
3つ以上をAutofilter。
0941デフォルトの名無しさん
2012/11/23(金) 20:04:25.85いや、3つ以上でも記録でできる。
0942938
2012/11/23(金) 20:09:14.65そのやりかたを聞いておるのだ
0943938
2012/11/23(金) 20:14:59.180944デフォルトの名無しさん
2012/11/23(金) 20:15:54.01なぜできないのかが不思議なんで、自分がやりたいことをもっと具体的に説明してるれる?
0945デフォルトの名無しさん
2012/11/23(金) 20:16:32.06.netはなぁ
CLRがインプロセスサーバとしてExcel.exe内で動作するんだよね?
Excel.exe.configがあればロードされちゃうし何かキモチワルイ
0946デフォルトの名無しさん
2012/11/23(金) 20:28:51.84場合、バイナリエディタ等でパスワードがクラックされる事はありませんか?
Excel2003 位までのマクロは、
バイナリエディタでパスワードの書き換えが出来ていたので心配です。
0947桃白白
2012/11/23(金) 21:27:11.95わかんない、桃白白それわかんない。
>>919
そうか、なるほど。
Arrrrr! Cap'n Eric be learnin' about threadin' the harrrrd way - Fabulous Adventures In Coding - Site Home - MSDN Blogs
http://blogs.msdn.com/b/ericlippert/archive/2003/09/19/53054.aspx
この人はScripting.Dictionaryの中の人なのか。Scripting.Dictionaryの実装がハッシュテーブル
であることは間違いないようだな。バケツの数が変わらないハッシュテーブルか。
0948デフォルトの名無しさん
2012/11/23(金) 22:14:44.93会社のが割れモノなんだろ
0949デフォルトの名無しさん
2012/11/23(金) 22:24:58.67マクロの記録がまともに動作しないそうだから
そもそもMS-Officeですらなかったりして
0950デフォルトの名無しさん
2012/11/23(金) 23:05:25.65やってみりゃいいじゃん。同じ手順で。
0951デフォルトの名無しさん
2012/11/24(土) 02:56:05.350952デフォルトの名無しさん
2012/11/24(土) 03:34:13.38「取る」の意味がわからん
取り除く =RIGHT("03",1)
取り出す =LEFT("03",1)
0953デフォルトの名無しさん
2012/11/24(土) 03:38:46.380954デフォルトの名無しさん
2012/11/24(土) 03:48:48.71ありがとうございます。
Format 関数を使ったら出来ました。
0955デフォルトの名無しさん
2012/11/24(土) 08:55:39.70質問や書き込みをする前にもう一回試したり調べたりしてからのが
人生で恥ずかしい思いをする事が少なくなるぞ
いやまじでまじで焦りは禁物
0956デフォルトの名無しさん
2012/11/24(土) 09:04:35.06最後の一行いらなくね?
あとExcelのバージョンは?
0957デフォルトの名無しさん
2012/11/24(土) 16:11:49.42どうも俺らの方が上な気がしてしまうんだが。
0958デフォルトの名無しさん
2012/11/24(土) 16:14:37.87マウスで選択した行を一度にコメント、コメントアウト
する様なショートカットボタンは無いですか?
0959デフォルトの名無しさん
2012/11/24(土) 16:17:23.33#region ****
#endregion
みたいなのってVBAじゃ無理?
0960デフォルトの名無しさん
2012/11/24(土) 17:20:23.10Office XPはあるよ。
それ以外のバージョンは手元にないんで知らん。
1.VBEのツールバーを右クリック。
2.メニューの中から「ユーザー設定」を選択。
3.「ユーザー設定」ウィンドウの「コマンド」タブを選択。
4.「分類(G):」の中から「編集」を選択。
5.「コマンド(D):」の中の「コメントブロック」か「非コメントブロック」をツールバーにドラッグして移動。
0961デフォルトの名無しさん
2012/11/24(土) 17:49:40.29高いスキルを保有していることと
人に教えることは、何というか別物だと思うんだ
0962デフォルトの名無しさん
2012/11/24(土) 17:53:55.73少なくともアルファベットを全角で書くやつはPC初心者に多いよね
0963デフォルトの名無しさん
2012/11/24(土) 17:58:55.71あなたですね。
0964デフォルトの名無しさん
2012/11/24(土) 18:28:55.71彼の知識は上の中くらいはある
でも頭の回転はさほど良くない
初心者相手に知識や初歩テクを伝授することは出来ても
素晴らしいプログラムを生み出したり
中級以上の者のステップアップになるような
記事や本を書くのは無理
人間、生まれた時からVBAの知識を持ってる奴など居ないから
初めは彼の知識を見て「こいつ、詳しいじゃん」と思うだろうが
頭の回転の良い奴は、理解や知識の蓄積も早いから
すぐに彼の領域を超えてしまい、「こいつより俺の方が上じゃん」となる
0965デフォルトの名無しさん
2012/11/24(土) 18:56:06.98ありがとうございます。Excel2010でも出来ました。
>>961 >>964
あの人のスキル自体は然程高く無いでしょうけど、
人に分かり易く教えるスキルはかなり上位なんじゃないかと思います。
0966802
2012/11/24(土) 19:04:13.33Excel自体の理解も浅いようなのでもっと勉強したいと思います。
お目汚し済みませんでした。
0967デフォルトの名無しさん
2012/11/24(土) 20:19:46.06フィルターは、「指定の値で始まる」にしたいんです(つまりワイルドカードが最後についたような「てすと*」みたいなもの。)。
これはどうやったらできますか?
CriteriaRangeにはセル範囲を入れないといけないらしいし一行目は項目名だから、ワイルドカードが使えないのです。
(この質問を理解できるのはかなりVBAに精通してる人のみだと思いますが)
0968デフォルトの名無しさん
2012/11/24(土) 20:20:58.040969967
2012/11/24(土) 20:44:49.83でもそれは作業用のセルをわざわざつくって、「てすと*」みたいに代入したから。
こうせず、コードだけでCriteriaRangeを実現することはできますか?
(理解できるのは限られた人のみと思いますが)
0970デフォルトの名無しさん
2012/11/24(土) 23:24:56.94今この機会を逃すのはどうして?
0971デフォルトの名無しさん
2012/11/24(土) 23:34:42.41それ以上はそれなりのしっかりした開発環境で開発しましょう、という事です。
更にそのサブセットでしかないVBAでコレ以上悩むなら、それは無駄だということです。
これ以上無駄に時間を消費する事を止め、解る人に開発を依頼してください。
ご安心下さい、あなたがダメと言う訳ではありません。
あなたは向いてない、というだけの事です。
0972デフォルトの名無しさん
2012/11/25(日) 02:38:20.62実際にはサポート切りたいのに使われすぎて切れないって時点で
そいつの想定外の使われ方されてるのは分かりきってるし
そんな理念はとうに崩れてるよ
実際に仕事でVBで○人月の開発とかザラにあるんだが・・・
0973デフォルトの名無しさん
2012/11/25(日) 05:17:05.16VBAでそれやるのは
間違ってる気がする
0974デフォルトの名無しさん
2012/11/25(日) 08:23:34.21VBAはExcelというプログラム分からない人でも長年使っていたインターフェイスを持っており
そのインターフェイスをそのままに、長年使ってきたシートフォーマットをそのままに
機能追加や自動化が出来るというメリットがある
PC慣れしてる奴は、Excelのシート操作がVBやCなどで作ったフォーム入力になっても何の弊害も感じないし
むしろそっちの方がやりやすく感じるものだが、PCに疎い奴は、ユーザーフォームで入力を簡素化してやっても
「作業が簡素化されている」ということより「以前と操作や入力方法が違う」ということに弊害を感じてしまうものだ
組織の中で働く以上、いまだそういう人の方が多いくらいだと言うことを忘れてしまうと
一部のPCベテランのみには認められるが、大多数のPC初心者にはウザがられる独りよがり野郎になってしまう
0975デフォルトの名無しさん
2012/11/25(日) 10:39:12.38activecell.AutoFilterまで入力すると自動入力候補が現れますが
cells(1,1).autofilterを入力してもなにも現れないのは
どうしてですか?
0976デフォルトの名無しさん
2012/11/25(日) 10:42:30.840977デフォルトの名無しさん
2012/11/25(日) 10:48:39.090978975
2012/11/25(日) 10:54:39.060979デフォルトの名無しさん
2012/11/25(日) 10:55:18.240980デフォルトの名無しさん
2012/11/25(日) 11:05:34.620981デフォルトの名無しさん
2012/11/25(日) 11:45:13.74>「作業が簡素化されている」ということより「以前と操作や入力方法が違う」ということに弊害を感じてしまうものだ
Windows 8 ですね。わかります。
0982デフォルトの名無しさん
2012/11/25(日) 12:38:01.11Cells(1,1)ってCells.Item(1.1)の省略形なんだよ。厳密にはCells.[_Default](1,1)だが
これらItemプロパティや[_Default]プロパティはRange以外でもいろんなものに使われている
たとえばWorksheets("Sheet1")はWorksheets.Item("Sheet1")の省略形。これも厳密には上と同じ[_Default]だ
だからItemプロパティでは入力候補を出しようがないんだな
Range("A1")やCells.Resize(1,1)などきちんとRange型を返すプロパティなら入力候補が出る
あるいはCells(1,1)をRange型の変数に入れてからピリオド打てば入力候補が出る
コーディングするときは入力候補が出るようなコーディング方法がおおむねセンスの良いコーディング方法だ
たとえばWith Worksheets("Sheet1")としてピリオド打っても入力候補は出ないが、Worksheet型の変数に
Set ws = Worksheets("Sheet1")
With ws
とすればピリオド打った時入力候補が出る
0983デフォルトの名無しさん
2012/11/25(日) 12:53:11.690984デフォルトの名無しさん
2012/11/25(日) 12:57:45.830985デフォルトの名無しさん
2012/11/25(日) 13:02:30.130986デフォルトの名無しさん
2012/11/25(日) 13:18:24.21Worksheetsの引数に変数使うならまだしも
リテラル値でベタ書きするなら
With Sheet1
ってすれば良いだけ
シート名(ブックのシートタブに表示される名前)は
VBA使わない人でも変更できるから、この名前を使って
シートを特定する方法は他者が使う場合は特に
バグの原因になることも多い
シートのオブジェクト名(CodeName)は、VBAわかる人以外
まず弄ることは無いからバグを引きおこしにくい
0987デフォルトの名無しさん
2012/11/25(日) 13:19:42.26>>982は的外れだった
0988デフォルトの名無しさん
2012/11/25(日) 13:21:18.02オブジェクト名使うのには俺も賛成だ
固有の型を返すからね
0989デフォルトの名無しさん
2012/11/25(日) 15:37:14.77他のWorkSheetを見てしまう可能性があるからそれはだめだろ
0990デフォルトの名無しさん
2012/11/25(日) 17:43:39.440991デフォルトの名無しさん
2012/11/25(日) 18:37:11.45マクロブックからデータブックを扱うときのデータブックのコードネームの使い方を教えて欲しい
0992デフォルトの名無しさん
2012/11/25(日) 18:39:12.85(この質問を理解できるのはかなりVBAに精通してる人のみだと思いますが)
0993デフォルトの名無しさん
2012/11/25(日) 18:46:45.150994デフォルトの名無しさん
2012/11/25(日) 18:51:24.94バインドってなんですか?
怪我したときに貼るやつ?
0995デフォルトの名無しさん
2012/11/25(日) 19:09:32.46ツマンネ
0996デフォルトの名無しさん
2012/11/25(日) 19:26:36.74他のワークブックがアクティブなときにマクロ実行するとそっちのブックのSheet1をwithるだろ
0997デフォルトの名無しさん
2012/11/25(日) 19:58:51.92そっちのブックってコードが書いてあるブックのことか? それなら理解できるが
0998デフォルトの名無しさん
2012/11/25(日) 20:10:08.75実は俺もよく解ってないんだけど、俺はいつもこうしてる。
Set myBook = Workbooks("hoge")
Set mySheet = myBook.Worksheets("fuga")
With mySheet
〜
End With
0999デフォルトの名無しさん
2012/11/25(日) 20:15:05.52Sheet1等のシートオブジェクトを指定した場合
対象となるワークブックは暗黙的にActiveSheetになる
だからAというブックへマクロを適応しようとしても
他のBというブックがActiveSheetになっていると
Aに対して行いたいことがBに対して行われてしまう
1000デフォルトの名無しさん
2012/11/25(日) 20:20:50.91http://toro.2ch.net/test/read.cgi/tech/1353842387/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。