12/08/19 17:01:50.51
Excelの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
スレリンク(tech板)
2:デフォルトの名無しさん
12/08/19 17:03:06.09
関連スレ:
VBAなんでも質問スレ
スレリンク(tech板)
3:デフォルトの名無しさん
12/08/20 00:06:38.58
MsgBox ">>1乙", vbAlert
しかしWin8でもVB6サポートされるとか
やっぱ当分VB系は安泰だなぁ
4:デフォルトの名無しさん
12/08/20 10:28:43.34
閉じたままのBook内のデータを参照するにはどうしたらいいですか?
そして閉じたぱぱのBook内のデータをオートフィルタすることもできたりしますか?
5:デフォルトの名無しさん
12/08/20 10:40:26.94
パパやママのことは、直接本人(両親)に相談してください
というのはさて置き、閉じたままと言っても、当然本当に閉じたままでは
何も出来るわけが無いので、「閉じたまま=GUI上で開かず」と解釈すると
ExcelのCOMインスタンスを作ってやってそれで開けばいいだけ
後の操作は普通に開いてるブックやシートと全く同じ
GUI上には表示せずに、裏で開いた状態でなんでも出来る
6:デフォルトの名無しさん
12/08/20 11:10:48.19
>>4
どうしてググろうと思わないわけ?
7:デフォルトの名無しさん
12/08/20 11:54:07.42
URLリンク(prt.iza.ne.jp)
雷でよく見る実にわかりにくい図のことで質問です。
濃いピンクが安全だということらしいけど
それより内側は危険であり、さらにそれより外側も危険という認識で合ってますか?
8:デフォルトの名無しさん
12/08/20 12:12:49.20
どこの誤爆だw
9:デフォルトの名無しさん
12/08/20 16:55:32.92
ExcelVBAで
Outlookのテンプレートの機能をプログラミングをしたいのですが
その方法を教えてくださぃ。
Outlookのテンプレート機能を使わないのは
メールの本文中にその当日の「日付」を使ったり
Excelのセルに用意したデータをメールの本文に使いたいからです。
10:デフォルトの名無しさん
12/08/20 17:16:34.42
outlookのvbaでやれ
11:桃白白
12/08/20 17:30:59.98
みんなおはよう
>>7
合ってると思うよ
12:デフォルトの名無しさん
12/08/20 17:45:38.20
モジュル先頭で宣言する変数はそのモジュル全体で使えるとのことですが
マクロ実行後も値はそのままですか?
次回にマクロ実行したときは値はそのぱぱ残ってる値に加算されますか?
13:デフォルトの名無しさん
12/08/20 17:59:32.15
>>12
その変数がクリアされなければ残ってる。
いつクリアされるのかは、明らかではない。
クリアされて困るなら、シートに保存すべし。
詳しくは、こことか参照。
URLリンク(www.moug.net)
14:デフォルトの名無しさん
12/08/20 18:08:05.83
>>5
COMインスタンスとはなんでしょぅか?
>>13
びっくりですね。
これからはモジュル先頭で変数は宣言しないことにしました。
15:デフォルトの名無しさん
12/08/20 18:26:39.82
>>14
> これからはモジュル先頭で変数は宣言しないことにしました。
関数の実行開始から終了までの同一性は保証されてるから、その範囲で使うなら問題ない。
「関数の実行開始から終了まで」というのは、
dim g as long
sub foo()
g = 1
bar
debug.print g
end sub
sub bar()
g = g + 1
end sub
のとき、foo()の開始から終了までという意味。
なお、クラスを使ってgをプロパティかprivate変数にすれば、知らない間にクリアされるということはなくなる。
16:デフォルトの名無しさん
12/08/20 23:54:52.30
>>15では無いが
よく解らなかったらとりあえずシートに残して使う時だけ拾うようにしとけば良いんでねーの
解ったら自分で直せる訳だし
COMはググれとしか。多分意識しないでも使ってるんだろうけど。
17:デフォルトの名無しさん
12/08/21 05:38:35.68
ユーザーフォーム表示してると表示されてる間はまずクリアされないよ
18:デフォルトの名無しさん
12/08/21 09:28:19.50
ユーザーフォームを表示している時に
別のブックを開いてアクティブにするにはどうしたらいい?
19:デフォルトの名無しさん
12/08/21 09:58:35.99
元のブック.ユーザフォーム.Activate
20:デフォルトの名無しさん
12/08/21 11:16:09.57
ありゃ?
元のブックのユーザフォーム.を開くには
元のブック.ユーザフォーム.Showでできないのはどうして?
>>18
単に「別ブック.Activate」でいいじゃん。
21:デフォルトの名無しさん
12/08/21 17:04:40.11
>>20
マクロから開くのではなくて、
普通にフォルダからダブルクリックで開いたときに
アクティブになるようにしたいのです。
22:デフォルトの名無しさん
12/08/21 17:10:40.46
>>21
したいのならしろよ。
23:デフォルトの名無しさん
12/08/21 17:31:25.65
他ブックのFormをActivateするにはどうしたらいいですか?
24:デフォルトの名無しさん
12/08/21 17:40:51.79
荒らすなよ
25:デフォルトの名無しさん
12/08/21 18:13:39.86
>>21
マクロ使わないなら、スレ違いだからどっか行って。
26:デフォルトの名無しさん
12/08/21 18:26:13.56
>>25
スレ違いですか?
元々開いてるユーザーフォームのあるブックの
マクロで設定できないかと思ったんですが
27:デフォルトの名無しさん
12/08/21 18:29:55.86
thisworkbook:
private sub workbook_open()
userform1.show
end sub
28:デフォルトの名無しさん
12/08/22 12:32:49.07
For sh = 5 To 10
Worksheets("" & 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のところで「アプリケーション定義またはオブジェクト定義のエラーです。」
と出ます。解決策をご教授ください。
29:デフォルトの名無しさん
12/08/22 12:49:13.39
>>28
ActiveSheet.Cells(1, num).Select
にしてみたら?
あと、Withとか使うと楽かもよ
30:桃白白
12/08/22 23:06:16.79
>>28
numが定義されてないんじゃね
31:デフォルトの名無しさん
12/08/22 23:22:08.89
>>30
32:桃白白
12/08/22 23:40:17.20
>>31
やめて!桃白白にむやみにリンクを張らないで!
定義のエラーっていってたから定義されてないんじゃねって桃白白考えたの
Cellsはオブジェクトが指定されなかったらアクティブワークブックのアクティブシート
を返しちゃうだろ WorksheetsほげほげActivateでアクティブシートが選択されてんだから
ActiveSheetってつけなくてもいんじゃね
33:桃白白
12/08/23 00:27:36.41
フォフォフォ…
∧ ∧
|≡V≡|
|O(\)O|
(V)(゚Д゚)(V)
ヽ三i三ソ
(/ \)
∪"∪
34:桃白白
12/08/23 00:28:10.42
フォッフォッフォッ
(V)∧_∧(V)
ヽ(・ω・)ノ
/ /
ノ ̄ゝ
フォッフォッフォッフォッフォッ
(V)∧_∧(V)
ヽ( )ノ
/ /
.....ノ ̄ゝ
35:デフォルトの名無しさん
12/08/24 06:50:22.30
マクロを頻繁に使ってたらPCが非常に重くなり、Excelの超基本操作のセル移動でさえ2-3秒かかることがあります(通常は一瞬)。
仕事で使ってるのでAM9からPM6までずっとExcelは立ち上げたままです。
マクロが原因なのは間違いないと思います。
軽くするにはどうしたらいいでしょうか?
36:デフォルトの名無しさん
12/08/24 07:28:47.43
>>35
マクロが原因だということまで特定できてるなら
そのマクロのバグを修正しろよ・・・
37:35
12/08/24 07:59:23.13
>>36
そんなこといわずに
あなたが上級者なら
よく初心者が犯しがちな
メモリーを消費したままになる良くないコードを予想し
それに対しての対策を指示してあげたらどうです?
38:桃白白
12/08/24 08:03:24.58
>>37
エスパーしたらいいじゃない! 教えてくれたらいいじゃない! ってか
じゃあ桃白白が教えてあげちゃう
グローバル変数使うのやめな これで100%解決する
桃白白に感謝しちゃったらいいじゃない
39:35
12/08/24 08:21:39.84
残念ながら白桃には感謝できん
グローバル変数なんて野蛮なものは使ってないからだ
40:桃白白
12/08/24 08:29:22.43
>>39
いいやお前はグローバル変数を使っている
使っていないと思い込んでいるだけだ
桃白白は上級者だがお前は初心者だ
初心者は上級者の言うことを素直に聞くべきだ
お前はグローバル変数を使っている お前はグローバル変数を使っている 目を閉じて反芻しろ
41:35
12/08/24 08:33:19.36
>>40
のび太のくせに生意気だ
42:デフォルトの名無しさん
12/08/24 11:37:23.01
VBA触り始めて数日の初歩的な質問ですみません。
環境はWindows7、Excel2007です。
ユーザーフォーム上のテキストボックスに
セルをリンクさせたいのですが、テキストボックスのプロパティの
Text欄、Value欄に「=Sheet1!A1」と入れても「」内の文字列が
そのまま表示されてしまいます。
Excelのシート上のテキストボックスで同じ操作をすると
そちらはきちんとセルがリンクされるのですが…。
43:デフォルトの名無しさん
12/08/24 11:49:49.47
>>42
ユーザーフォームのテキストボックスなら
「=Sheet1!A1」を入れるのはControlSource
44:へっぽこエスパー
12/08/24 12:34:01.86
>>35
エラーメッセージとか出ないの?
Excel2007だとこんなバグもあるみたいだけど
URLリンク(support.microsoft.com)
45:デフォルトの名無しさん
12/08/24 12:34:21.37
>>43
おおおおお!出来た!
これでとりあえず形だけは完成しました。
ありがとうございます
46:デフォルトの名無しさん
12/08/24 13:36:54.76
>>42です
実際に動かしてみたら問題が発生してしまいました。
下記の状況です。
ユーザーフォーム上でコマンドボタン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)という数式は消え、他のコマンドボタンを押しても反応がなくなってしまいます。
どうすればよいのでしょうか。。
47:へっぽこエスパー
12/08/24 15:54:05.98
>>46
各コマンドボタンのクリックイベントに
Sheet2.Cells(1,1) = "= SUM(Sheet1!C:C)"
って入れといたらどうですか?
あと、On/Offの2値を扱いたいなら
コマンドボタンよりトグルボタンのほうが良くないですか?
48:デフォルトの名無しさん
12/08/24 22:39:47.47
>>46,47
まずControlSource使うのやめて、
各ボタンのクリックイベントに、TextBox1.Text = Sheet2.Range("A1").Valueとか書くのが正解だろ
(つかそう書いたサブルーチン呼べ)
というかまずボタンを重ねて配置するとか馬鹿なことをやめろよ
49:デフォルトの名無しさん
12/08/25 11:19:20.04
埋め込みグラフの目盛り線を選択したいのですが、エラーになってしまいます。
ActiveSheet.ChartObjects(1).Chart.Axes(xlValue).MajorGridlines.Select
どこを直せばいいですか。
50:デフォルトの名無しさん
12/08/25 11:59:34.26
シートに挿入したチェックボックスが消せません。
どこを直せばいいのですか。
Activesheet.Shapes.Delete
51:桃白白
12/08/25 12:04:08.98
>>49
なんというエラーが出る?桃白白にもわかりそうなエラー?
わかりそうなやつだったら答えちゃうけど
52:桃白白
12/08/25 12:12:42.00
>>50
For 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
53:デフォルトの名無しさん
12/08/25 13:12:04.08
>>47
>>48
役割はトグル以外の何物でもないのですが、
クリックすると白黒画像からカラーに変わるギミックを
どうしてもやりたくて、方法がわからずこのような原始的な方法を取りました。
各ボタンに記述してみます。ありがとうございました
54:デフォルトの名無しさん
12/08/25 13:26:17.55
>>49
選択しようとするからじゃないの?
ActiveSheet.ChartObjects(1).Activate
55:デフォルトの名無しさん
12/08/25 14:32:05.25
>>54
ActiveSheet.ChartObjects(1).Activate
ActiveSheet.ChartObjects(1).Chart.Axes(xlValue).MajorGridlines.Select
できましたwありがとうございます
56:桃白白
12/08/25 14:40:56.33
>>55
そんなの桃白白認めない
57:デフォルトの名無しさん
12/08/25 17:22:08.78
ExcelVBAの型変換について疑問がありますので、詳しい方、ご教示ください。
ExcelVBAでは、文字型の数値が、代入先の型に自動的に変換されるものと漠然と思っていました。
以下のようにサンプルを作ってテストしてみましたが一貫しない結果がでました。
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
58:デフォルトの名無しさん
12/08/25 17:32:32.39
>>57
ちゃんと宣言されてないよ
59:デフォルトの名無しさん
12/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をやっていたというわけだ
60:デフォルトの名無しさん
12/08/25 18:25:24.46
初心者じゃ無いつもりだけど未だに分からないのがdecimal。
なんで宣言出来ないんだ??
61:デフォルトの名無しさん
12/08/25 18:49:27.72
>>60
仕様に対して「なんで」って言い出したらキリがない
62:デフォルトの名無しさん
12/08/25 18:50:38.91
現在、10 進型はバリアント型 (Variant) の内部処理形式でのみ使用できます。変数を 10 進型として宣言することはできません
ってヘルプに書いてあるから、そういう仕様だとしか
63:デフォルトの名無しさん
12/08/25 19:10:26.70
ある程度割り切りも必要だけど、
何事にも疑問を持って追求しようとする姿勢が無いとダメだよ。
64:デフォルトの名無しさん
12/08/25 19:33:44.95
調べれば仕様だって事はすぐわかるんだが、追及なんて全くしてないだろ
なんでそういう仕様なのか考えるのはまだ意味があるかもしれんが
65:デフォルトの名無しさん
12/08/25 21:27:58.33
一応Currency型があるから。
誰も覚えてなさそうだけどw
66:デフォルトの名無しさん
12/08/25 21:29:55.49
57です
59様、ありがとうございます。
てっきり複数列挙してもまとめて型宣言できるものと思っていました。
67:デフォルトの名無しさん
12/08/25 22:39:09.50
セルにAlt+Enterで改行したデータを
ユーザーフォームのTextboxに入れようとしても
改行してくれないんですね。
何かいい方法はないですか?
68:デフォルトの名無しさん
12/08/25 22:44:36.80
>>67
たぶん MultiLineがFalseになってるだけだと
69:デフォルトの名無しさん
12/08/25 23:10:05.12
>>68
ありがとう!
70:デフォルトの名無しさん
12/08/26 03:13:42.98
>>63
追求する意味があるものと無いものを見極める能力も無いとダメだよ
何も解ってない状態で割り切って諦めるのと、追求する意味がないことを見極めて
無駄な愚考をしないのは違うからね
71:デフォルトの名無しさん
12/08/26 09:14:57.64
おまいらが作ったクラスモジュール教えてくれ
使える、別のアプリ専用、面白い、誰得と何でもいいわ
72:デフォルトの名無しさん
12/08/26 09:46:58.31
>>71
具体性のない質問というかネタクレクレはスレ違い
>>2でも行くかググって漁れ
73:デフォルトの名無しさん
12/08/26 19:11:36.33
ソート用クラスなら。
並び替えられるデータは数字の入った配列で、
比較メソッドはイベントとして使う側で実装する形。
数字=インデックスとして見れば、どんな内容のソートにでも使える。
74:デフォルトの名無しさん
12/08/26 23:09:08.58
入力データを取り込むのに
Dim ttl As String
If TypeName(buf) = "String" Then
ttl = InputBox("タイトルを入力", title:="タイトル入力", Default:=buf) ←bufは事前にクリップボードからセット
Else
ttl1 = ""
End If
と言うのを作ったのですが、これだと1度に1つの文字列しか取り込めません
1つのダイアログを表示して入力箇所を2つ表示し
同時に2つの文字列を取り込む場合どうすればよいのでしょうか?
75:デフォルトの名無しさん
12/08/26 23:19:45.24
ユーザーフォーム使えば良いだけだと思うよ
76:デフォルトの名無しさん
12/08/26 23:40:00.07
使う方が嫌じゃなければカンマで区切るとか
77:デフォルトの名無しさん
12/08/26 23:54:40.85
あとはforで二回まわすとか?
ユーザーフォームが一番スマートだと思うけどね
78:74
12/08/27 00:50:32.74
ユーザーフォームって本を買ってきてVBを独学したときに作った記憶があるな
クリップボードから拾わせた文字列を入力の初期値にして
文字列を入力したらVBに取り込んで
シートのフィルターの指定フィールドで抽出させるというのを作ったんだけど
やっぱり複数の文字列で同時にフィルターを掛けたいときが時々ある
同じ内容なんだけど、入力した時期によってキーワードが違っているときとか
79:デフォルトの名無しさん
12/08/27 01:07:36.07
解読しづらい文章だな
80:デフォルトの名無しさん
12/08/27 21:04:53.28
各セルの文中の最初に「★」がついてるものだけを探して「★」だけを消すのはどうすればよいでしょうか
最初でないところ(文中)にも「★」が出てくることがあるので検索して丸ごと置換というわけにもいかず困っています
よろしくお願いします
81:デフォルトの名無しさん
12/08/27 21:21:09.13
>>80
Range.Findで探して、Mid$関数で消せば良いんじゃないか?
その条件ならワイルドカードが使えるし。
82:デフォルトの名無しさん
12/08/27 22:37:49.14
Selection.Replace What:="★*", Replacement:="", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
たんに全体一致で"★*"を""で置き換えるだけだが。VBAいらね
83:デフォルトの名無しさん
12/08/27 23:58:40.21
>>80
↑ので充分だと思うけど
もし範囲が決まっているなら
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
でもどうだろうか
84:デフォルトの名無しさん
12/08/28 00:23:11.36
if instr(hoge,"★") = 1 then
right(hoge,len(hoge)-1)
85:デフォルトの名無しさん
12/08/28 05:54:18.56
エクセルでwavファイルを取り込んでmp3で保存することは可能でしょうか?
86:デフォルトの名無しさん
12/08/28 06:18:10.50
常識だろw
87:デフォルトの名無しさん
12/08/28 07:15:53.67
>>85
エクセルでやる意味について
88:デフォルトの名無しさん
12/08/28 07:30:31.18
>>85
世の中広いな
89:桃白白
12/08/28 07:31:22.12
>>87
エクセルはみんなのツールだ。フロントエンドをこしらえるのならなかなかいんじゃないか。
90:デフォルトの名無しさん
12/08/28 07:35:55.08
>>85
可能だけどスレ違い
91:デフォルトの名無しさん
12/08/28 19:27:40.17
マクロ1でマクロ2を走らせる時、どちらも同じ変数名を使っているのですが問題ないですか?
それぞれのマクロの中で値を指定していれば大丈夫ですよね?
一応動くのですがちょっと不安なので詳しく教えてください
92:デフォルトの名無しさん
12/08/28 19:29:55.84
変数にはスコープって概念があってな
大丈夫かどうかはソースみないと何とも言えん
93:デフォルトの名無しさん
12/08/28 19:44:37.89
Public変数を知らなそうなので大丈夫でしゅ
94:デフォルトの名無しさん
12/08/28 20:57:27.14
ユーザー定義関数の引数にrangeオブジェクトを指定した場合、
その値が数値の場合は配列に入れ直した方が処理は軽くなるのですか?
範囲は固定ではなく任意です。
環境なくて試せません。お願いします
95:デフォルトの名無しさん
12/08/28 21:15:15.96
軽くって?
配列に移し替える時にループ使うから意味ないと思うけど
96:デフォルトの名無しさん
12/08/28 21:47:07.44
>>95
失礼しました、シートから関数を直接呼び出すと挙動が重かったので軽くとかきました。
たしかにループしたら効果半減ですね…
97:デフォルトの名無しさん
12/08/28 22:13:29.80
ソートの質問です
Sheet1が
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し す さ
と並べ替えたいのです
また,このようなソートはどのようにググればやり方が出てきますか?
98:デフォルトの名無しさん
12/08/28 22:43:26.96
自力で関数を書く
99:デフォルトの名無しさん
12/08/28 22:46:56.48
>>97
Worksheet_SelectionChangeでググってみたらどう?
100:デフォルトの名無しさん
12/08/29 00:56:26.02
>>94-96 Variant型変数にRangeの値を代入するならループなんて不要
ためしにこんなん書いてみたら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
101:デフォルトの名無しさん
12/08/29 00:57:03.37
>>96
ユーザー定義だとどう書いても重いよね
102:デフォルトの名無しさん
12/08/29 07:25:09.73
>>100
ありがとうございます。
引数をvariantにしてしまえばいいのですかね。
試してみます。
>>101
エクセル使う人は、直感的使いたいようで。
配列数式とか駆使して挙動みながら無理のない範囲で作るしかないですよね。
103:桃白白
12/08/29 11:37:02.40
>>97
Friendpaste - SortWithForeinKey
URLリンク(friendpaste.com)
桃白白が全力で実装したから試してみて
104:デフォルトの名無しさん
12/08/30 15:06:34.82
VBA勉強して2日目のド初心者です
URLリンク(www.dotup.org)
画像のように、2ページに分かれてそれぞれテキストボックスオブジェクトが2つ有り
上部のボタンを押すと各テキストをテキストファイルとして保存する
という処理を作りたいのですが
1ページだけなら
strREC = ActiveSheet.Shapes.Range(Array("Text Box 7")).TextFrame.Characters.Text
Print #intFreeFile, strREC
という風にして実装できたのですが、
2ページ目にあるテキストボックスオブジェクトを指定する方法が分かりません。
やり方のヒントを教えて下さい。
105:デフォルトの名無しさん
12/08/30 15:23:23.59
ド素人すぎてクラクラするなw
106:デフォルトの名無しさん
12/08/30 16:23:19.37
そんなこと言うくらいなら教えてあげなよ
107:デフォルトの名無しさん
12/08/30 16:27:27.69
for eachで回せばいいんだよ
108:桃白白
12/08/30 17:52:44.75
>>104
画像ではText Box 7って2ページ目のテキストボックスなんでない?
ページ変わってもテキストボックス取得する方法は変わらんだろ
テキストボックスを選択したら左上にテキストボックスの名前が表示されるから、そこに桃白白と入力して
ActiveSheet.Shapes("桃白白").TextFrame.Characters.Textでいけるっしょ
109:デフォルトの名無しさん
12/08/30 23:44:46.08
対象のブックが開いているか調べるのにはどうしたらいいですか?
もし、開いていたらそのままシートの内容をコピーして、
開いていなかったら、開いてコピー後、対象ブックを閉じる
というのをやりたいです。
110:デフォルトの名無しさん
12/08/30 23:53:28.43
馬鹿には無理
111:桃白白
12/08/31 00:02:07.39
>>109
For 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
112:デフォルトの名無しさん
12/08/31 00:33:06.46
Windows XP / Excel 2003 環境にて質問です。
A.xls が直接開かれたか、他ブック(B.xls、C.xls、D.xls)から
VBA-Workbooks.Openで開かれたかを
A.xls側から判断するのに適した方法ご教示願います。
今現在の方法としては、AにWorkbook_Open時に開いているブック名を調べ、
B、C、Dに該当するファイル名が開かれたら、他ブックより開かれた。と判定させています。
(偶然ですが>109-111さんの流れのようなもの)
ただしこの場合だとAを直接開く際、Bが既に起動中でも該当してしまいます。
条件として個人用マクロは使用せずにてクリアしたく、よろしくお願いします。
113:デフォルトの名無しさん
12/08/31 07:10:08.53
馬鹿には無理
114:デフォルトの名無しさん
12/08/31 08:24:31.30
Auto_Open が走るかどうかで判定できる気がする
115:デフォルトの名無しさん
12/08/31 08:44:54.04
>>112
A.xls側が判断するタイミングはいつ?いつでも?
116:デフォルトの名無しさん
12/08/31 09:55:33.99
>>112
他ブックからオープンしたときは
A.xlsのどこか任意のセルにその呼び出し元を記述させるようにしたら良いんでない?
たとえばB.xlsからオープンしたら
Workbooks.open(A.xls)
Activeworkbook.sheets(1).cells(1,1)="B.xls"
みたいに
117:デフォルトの名無しさん
12/08/31 10:34:50.97
URLリンク(www.officiallyjd.com)
118:デフォルトの名無しさん
12/08/31 12:16:22.91
>>112
URLリンク(www.moug.net)
これ参考にならないかな?
119:デフォルトの名無しさん
12/08/31 16:48:56.27
質問です
変数 = A1.value
A1のセルには、文字列helpme
となっているところを
A1にhelp
A2にme
としたとき、
変数= なんて.value書けばいいですか?
120:デフォルトの名無しさん
12/08/31 17:13:04.83
range("a1").value & range("a2).value
ってことか?
121:デフォルトの名無しさん
12/08/31 17:13:52.47
>>119
質問するならちゃんとしたコードで書いてよ
普通に考えて
変数 = A1.value
は「セルA1の値を変数に代入する」という意味のコードとしては
まともなコードとはいえない
これが「セルA1の値を変数に代入する」という意味のコードとして成立するためには
表記中の「A1」が「セルA1を意味するオブジェクト変数」である必要があるけど
それは>>119の質問内容からは確定できない
ちゃんと動作するコードとして書くなら
変数 = Cells("A1").Value
みたいに書いてないとおかしい
で、そういう意味であるなら
変数 = Cells("A1").Value & Cells("A2").Value
とすれば要求を満たせる
122:桃白白
12/08/31 17:25:14.21
もしくはこうか
Range("A2") = Right(Range("A1"), 2)
Range("A1") = Left(Range("A1"), 4)
123:デフォルトの名無しさん
12/08/31 17:41:04.79
>>122
それは意味が違うんじゃない?
124:デフォルトの名無しさん
12/08/31 18:30:31.90
お前ら相変わらずエスパーだな俺には何言ってるのかわからん
125:デフォルトの名無しさん
12/08/31 18:40:22.16
>>124
>>119は意味分からんでもそれへの回答で理解できただろ
126:112
12/08/31 20:04:45.71
>>115
Aが呼び出されて直後の必要があります。
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 自己起動。見たいに。
どうもありがとうございました。
127:デフォルトの名無しさん
12/08/31 20:12:25.23
>>120
これでできますた!!!ありがとう!
128:デフォルトの名無しさん
12/08/31 20:16:13.19
こんにちは!質問です!
エクセルファイルを開いている日(毎日)からみて次の月曜日の日付を取得するにはどうすればいいですか?
つまり火曜日に開いても木曜日に開いても来週の月曜日の日付を表示し、来週には再来週の日付を表示するということです。
129:112
12/08/31 20:31:39.46
>>128
=TODAY()+9-WEEKDAY(TODAY())
月曜日に開いた場合の処理が指示されていないから、そこはつけたしてくだしあ。
130:デフォルトの名無しさん
12/08/31 20:34:43.70
name消し漏れ+
日曜日の判定も必要ですな。>129だと不完全です。
WEEKDAY(TODAY()) = 0と1のとき分岐してください。
131:デフォルトの名無しさん
12/08/31 21:13:03.84
>>126
>>114はダメだったのか?
132:デフォルトの名無しさん
12/08/31 21:14:54.31
セルに文字としてプラスの記号入れ方教えてください。
133:デフォルトの名無しさん
12/08/31 21:17:13.60
>>132
全角文字で
134:デフォルトの名無しさん
12/08/31 21:18:26.75
ありがとうございます
135:デフォルトの名無しさん
12/09/01 00:26:56.53
>>130
これってどういう意味?
136:デフォルトの名無しさん
12/09/01 00:36:13.97
多分解決しますた
137:>112 >126
12/09/02 03:17:58.59
>>131(>>114)
初めて知りました。
できそうですね。
ありがとうございます。
138:デフォルトの名無しさん
12/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をコメントブロックすると、ループは廻ります、何がいけないのでしょうか?
139:デフォルトの名無しさん
12/09/02 22:03:18.22
×End
○End If
140:デフォルトの名無しさん
12/09/02 22:03:38.33
>>138
end じゃなく end ifでは?
141:デフォルトの名無しさん
12/09/02 22:04:45.00
>>138
最後から2行目の「End」は「End If」でしょ。
142:デフォルトの名無しさん
12/09/02 22:13:18.95
あっ!ミスってた
有り難うみんな
143:デフォルトの名無しさん
12/09/02 23:06:48.44
ここって資格試験について質問しても大丈夫でしょうか?
公式テキストの解答で1つ理解できないものがありまして・・・。
144:デフォルトの名無しさん
12/09/02 23:13:57.52
既に終った試験だとしても、出題内容をこういうところで漏らすことが
非常識な行動じゃないと思えるほどのバカなら好きにしたらいいさ。
145:デフォルトの名無しさん
12/09/02 23:48:20.43
>>144
いや、実際の試験では無くて公式テキストのサンプル問題です。
ちょっと理屈が良く分からない部分がありまして。
146:デフォルトの名無しさん
12/09/03 00:14:38.18
何でも良いから晴れよ
147:デフォルトの名無しさん
12/09/03 01:33:06.43
福沢諭吉「脱亜論」 1885年3月16日 時事新報
日本の不幸は中国と朝鮮だ。
この二国の人々も日本人と同じく漢字文化圏に属し、同じ古典を共有しているが、
もともと人種的に異なるのか、教育に差があるのか、 日本との精神的隔たりはあまりにも大きい。
地球規模で情報が行き来する時代にあって、近代文明や国際法について知りながら、
過去に拘り続ける中国・朝鮮の精神は千年前と違わない。
国際的な紛争の場面でも「悪いのはお前の方だ」と開き直って恥じることもない。
もはや、この二国が国際的な常識を身につけることを期待してはならない。
「東アジア共同体」の一員として その繁栄に与ってくれるなどという幻想は捨てるべきである。
日本は、大陸や半島との関係を絶ち、 欧米と共に進まなければならない。
ただ隣国だからという理由だけで特別な感情を持って接してはならない。
この二国に対しても、国際的な常識に従い、国際法に則って接すればよい。
悪友の悪事を見逃す者は、共に悪名を逃れ得ない。
私は気持ちにおいては「東アジア」の悪友と絶交するものである。
_,,,,,,__ __,,,__
ィjj)))))))))!!!!!彡ヽ,
/ミ/ ,}彡ヘ
|ミ{ -‐ ‐ ‐ ‐- {三=|
El==; ゚ ''==. |ミミ,|
`レfォ、,〉 :rfォ.、, !iル┤
. { `¨ i ・、¨ ´ `{ゞ'} 支那、朝鮮とは
. | '`!!^'ヽ .「´ 付き合うなと忠告しておいたのに。。。
! ,-ニ'¬-、 ,!|,_
. \´?` / ∧ヘ、
__/〉`ー ' ´ / 〉 \
_, ィ´「∧ / / 」¬ー- 、_
-‐ ´ / / ヽ、/ / iヾ ヽ
148:デフォルトの名無しさん
12/09/03 14:20:50.18
>>144
公式テキストの問題と解答をまるごとここに書くのならともかく、納得できない一問について
ここに書くことのどこに問題があるのか?
149:桃白白
12/09/03 15:19:53.53
引用の範疇なら問題ないだろ
VBAの設問なのか? 何だったら桃白白がお答えしちゃうけど? 貼っちゃいなよ
150:デフォルトの名無しさん
12/09/03 20:55:59.52
>>145
気になるから貼ってくれよ
151:デフォルトの名無しさん
12/09/03 21:54:07.61
質問です。環境はwindows XP , Excel2003です
エクセルファイルをメールで送信するコード、つまり
Application.Dialogs(xlDialogSendMail).Show
を使いましてメールを送信する際、引数の"Arg1"つまり「メール宛先」に
複数人のアドレスを入れる関係上、宛先文字列が256文字を超えてしまいます。
255文字以内に収めれば、上手くメーラーが起動してメール送信準備が
されるのですが、256文字を超えると、エラーが出るわけでもなく
ただメールが立ち上がらないという状態になります。
対策をする前に、なぜここで256文字を超えたらダメなのか、を一応
知っておきたいです。どなたか、知っていたら教えてください!
152:デフォルトの名無しさん
12/09/03 22:24:12.60
>>151
容量的な問題255バイトまで
153:デフォルトの名無しさん
12/09/03 22:27:48.90
ExcelVBAでLifeGameを作った( URLリンク(www.dropbox.com) )
のですが、10世代ぐらいループさせるとExcelが固まります
何が原因か教えていただけませんか?
Windows 7 Ult x64、Excel 2010です
154:デフォルトの名無しさん
12/09/04 00:07:02.26
多量のテーブルデータがあったとして、
ワークシートとデータベースって
どっちを使おうっていう判断基準を教えてください
ファイルサイズを考えて、どちらも外部ファイルにデータを置くとした場合。
155:デフォルトの名無しさん
12/09/04 00:24:44.36
>>154
具体例を挙げてくれれば助言はできるけど
そんなもん一概に言えないよ
156:デフォルトの名無しさん
12/09/04 00:30:58.40
データ数が1万レコード以上ある時はアクセスを使うべき
157:デフォルトの名無しさん
12/09/04 00:40:54.73
>>155
1000×3ぐらいの数値テーブルが、数十個あって
ランダムな場所を幾度も読み込んで計算するような感じです
速度が求められます
シートにおさまるんだけど、どちらがいいのかな~と。
158:157
12/09/04 00:48:49.04
ちなみに、今はワークシートのデータをdllに投げて、処理して値を受け取るようにしているんだけど、
配布やら設定やらの問題でvbaで完結させたい。
159:デフォルトの名無しさん
12/09/04 01:03:28.50
アクセスじゃなくてエクセルでdbやってみりゃいいじゃん
160:デフォルトの名無しさん
12/09/04 01:19:21.98
メモリに乗りきらないとか、ワークシートに収まらないほどのデータがあるならDB
それ以外なら好きにしろ
161:デフォルトの名無しさん
12/09/04 04:33:32.77
>>157
その程度のデータ量なら配列に一気に読み込んでから計算するのが一番処理が速い
162:桃白白
12/09/04 05:52:03.40
>>153
スリープのあとにDoEventsを呼ぶようにしたら
10000回ループしても問題なかったよ
Call VBA.Interaction.DoEvents
理屈は知らん、寝るのに忙しくて表示を更新できません的なことなんじゃね
163:デフォルトの名無しさん
12/09/04 06:51:00.28
何かというと配列云々をいうアホがいるがそれだけじゃまったく不十分
アルゴリズムの方が大事だ
164:デフォルトの名無しさん
12/09/04 07:11:04.98
アルゴリズムの方も大事だ、だろ
シートとのやり取りのコストも、これはこれで馬鹿にならないよ。
>>153
x64Win8+Excel2013で動かしてみたけど固まりはしないな。
ただ、ESCキーでの実行中断が何故か効かなくなった。
165:153
12/09/04 07:57:06.49
>>162
固まらなくなりました。ありがとうございます
ちょっと理屈調べてみたいと思います
>>164
環境にもよるみたいですね。テストありがとうございました
166:デフォルトの名無しさん
12/09/04 09:26:27.40
>>153
余計なお世話かも知れないが、
プログラムが動作するしない以前の問題として
変数の宣言が間違ってる。
dim a,b as integer
だと、aがVariant型、bがInteger型になる。
あと、変数名間違ってるのが数カ所あった。
Option Expricitで変数の宣言を強制する癖をつけた方が良いと思う。
167:166
12/09/04 09:31:39.92
綴り間違えた
×Expricit
○Explicit
168:デフォルトの名無しさん
12/09/04 18:33:21.31
これは恥ずかしい。
169:151
12/09/04 18:52:25.13
>>152
ありがとうございます。その255バイトまでっていうのが
何の仕様なのかが、どうも掴めなくて気持ち悪いんです。
変数の型はバリアントにしているので、変数の型によって255バイト
っていう制限がかかるわけじゃないし
Application.Dialogs(xlDialogSendMail).Show の引数は255バイト
までと決まっている(仕様)、ということなんでしょうか?
170:デフォルトの名無しさん
12/09/04 19:26:37.09
>>169
メールのtoフィールドが255バイト以下ってのはRFCで決まってたはず
それ以上送りたい場合はtoフィールド自体の数を増やせばいいんだけど、
受け取った側から見るとあんまり気分の良い物じゃないのでBCCなどを使った方がいい
171:桃白白
12/09/04 20:06:56.45
>>170
マジで!? メールアドレスの最大の長さが255文字でTOが複数のアドレスを含むことが
できるとするなら理屈としてはTOは255文字以上を許容しないといけないんじゃね?
>>151
配列でアドレスを指定できるんじゃね?
Application.Dialogs(xlDialogSendMail).Show Array("桃白白さん", "ブルマさん")
みたいにして
172:153
12/09/04 20:29:08.45
>>166
まじかよVBA糞だな首吊ってきます
173:デフォルトの名無しさん
12/09/04 23:30:33.17
>>169
自作鯖ならsendmailmaxなんちゃらみたいな設定がたぶんhtod.confとかにあると
思ったけど
to Cc Bccでの上限数はあまり変わらないんじゃないか
174:デフォルトの名無しさん
12/09/05 00:43:55.42
>>172
VBAがというか大本のVBがそういう仕様だからなぁ
つか知らなきゃそう書いちゃうよな
175:デフォルトの名無しさん
12/09/07 12:02:31.87
質問です。
For 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のバージョンによってこのような事が起こるのでしょうか?
もしそうだとしたらどこかにその情報のソースは無いでしょうか?
176:デフォルトの名無しさん
12/09/07 12:47:57.33
ExcelのVBAについて学ぼうと思っています。
まだまだ初心者なので、VBAについてお詳しい方、
ExcelのVBAでのテーブル作成方法を教えてください。
177:デフォルトの名無しさん
12/09/07 12:51:57.92
↑入力項目は①入力年月日②転出入りフラグ1、転入2、転出(選択すると自動的にカウントアップ)③氏名④新住所⑤性別
⑥年齢⑦生年月日⑦職業⑧男性人口±⑨女性人口±⑩全体の人口±といったところです。
このデーターを格納し帳票に飛ばしカウントアップしてデイリー分の男性、女性の転出、転入を出力データとしてまとめ
総人口数を求めるようにしたいのですが。
178:デフォルトの名無しさん
12/09/07 13:06:18.19
馬鹿には無理
179:桃白白
12/09/07 13:34:55.59
>>175
Excel 2007 で Shapes オブジェクトのインデックスに不正な値 0 を指定してもエラーにならない
URLリンク(support.microsoft.com)
これかな。
For Toでぐるぐるするなら
For shapeCount = 1 To .Shapes.Count
にしないと0からCountまでぐるぐるしたらCount + 1のShapeが存在することになっちゃう。
Shapesオブジェクトの実装はたぶん線形リストで
序数が大きくなるほどアクセスするのに時間がかかるから
For Eachでぐるぐるしたほうがいいよ。
For Each tempShape In .Shapes
Next
180:桃白白
12/09/07 13:39:04.73
>>176
データベースがメインになるんなら
Accessでやっちゃった方がよくね?
181:デフォルトの名無しさん
12/09/07 13:58:48.61
access高いから避けたい
182:桃白白
12/09/07 14:17:45.26
>>181
データベースに何を使うかは決まってんの? MDB?
183:デフォルトの名無しさん
12/09/07 15:37:49.26
PostgreSQLが良い
184:桃白白
12/09/07 19:38:37.15
>>183
ゾウさんのやつな、かっけーよな
185:デフォルトの名無しさん
12/09/08 02:27:32.71
教えて下さい。
excel vba でIE object のコントロールで
ajaxを起動できますか?
fireeventでjavascriptはわかったのですが
selectにonclickがなくajaxでload window
しているものがありどう呼び出せばよいか
悩んでます
186:デフォルトの名無しさん
12/09/08 04:45:25.16
★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で出来ることは全てスレ違いだと思ってください。
187:デフォルトの名無しさん
12/09/08 08:35:29.78
重ねたバケツが抜けないのですが、何か良い方法はあるでしょうか?
188:デフォルトの名無しさん
12/09/08 09:29:19.83
外側のバケツのみ熱します
189:187
12/09/08 09:30:46.59
どうやって熱しますか?
190:デフォルトの名無しさん
12/09/08 09:41:15.34
油を注いで熱します
191:デフォルトの名無しさん
12/09/08 09:48:31.79
>>185
的外れかもしれないけどブックマークレットで呼ぶとか?
URLリンク(shokai.org)
192:デフォルトの名無しさん
12/09/08 20:57:56.13
>>177
DAOとかADOとかでExcelをRDBみたいにSQLで扱えるから
そういう感じでやれば良いんでね
やり方はググって好きな方法選んでくれ
193:桃白白
12/09/09 01:50:11.99
みんな聞いて。桃白白のExcelの使用期限が終わりそう、繰り返す、桃白白のExcelの使用期限が終わりそう。
194:デフォルトの名無しさん
12/09/09 02:17:54.45
Excelって使用期限が設けられているライセンス体系もあったんか
次買うときはケチらずに無期限ライセンスのを買えよ
195:桃白白
12/09/09 02:27:17.22
>>194
桃白白貧乏だから買えないの。寄付する? するんだったら桃白白はその好意を決して断らない
ことをここに誓う用意があるけど?
196:デフォルトの名無しさん
12/09/09 04:13:41.72
パソコンをリカバリすればまた体験版が使えるようになるよ
197:デフォルトの名無しさん
12/09/09 07:12:31.16
>>195
互換Office使えばタダだよ
VBA使えないけど
198:デフォルトの名無しさん
12/09/09 07:31:11.37
貧乏だけど知識が豊富で頭も良くて有用な回答者にならOfficeくらい寄付してもいいが、
貧乏な上に知識も多少の回答は出来るが並以下レベルで、頭の回転も弱い奴となると、
べつに回答者を続けてくれなくても誰も困らないから、Excelの使用期限と共に消えてくれて
一向に構わないな
199:桃白白
12/09/09 10:38:47.13
∧∧
/⌒ヽ)
i三 ∪
○三 |
(/~∪
三三
三三
三三三
200:デフォルトの名無しさん
12/09/09 15:24:00.49
>>199
俺も貧乏だから寄付しないけどタオパイパイ嫌いじゃないよ
これからは回答せずに
にぎやかしでAA貼ってりゃいいじゃん
201:デフォルトの名無しさん
12/09/09 15:26:03.47
私の声がデムパになって
波になってあなたへ向かってく
私の歌がデムパになって
波になってあなたへ響いてく
私の愛がデムパになって
波になってあなたへ届いてく
私の電子回路が短絡する前に
Electric LOVE Electric LOVE
(∩ ゚д゚) アーアー
この気持ちあなたに届くかな
202:デフォルトの名無しさん
12/09/10 11:09:37.38
VBAであるセル範囲をコピペして他のシートに貼り付けたとき
図のオブジェクトがどういうわけかコピペされないんです。
どうすればこの図のオブジェクトも正しくコピペされて他のシートにも表示させるようにできますか?
203:デフォルトの名無しさん
12/09/10 11:21:30.08
馬鹿には無理
204:202
12/09/10 11:31:04.49
>>203みたいな馬鹿には回答は無理なのは分かりますよ。
205:デフォルトの名無しさん
12/09/10 11:37:58.19
ただ図がセル範囲からはみ出してるだけじゃないのか?
206:202
12/09/10 11:40:24.57
いえ、しっかりセル範囲内におさまっています。
列は3、行は20くらい、
図はちょうどど真ん中あたりにあり、1つのセルと同じくらいの大きさなのに。
207:デフォルトの名無しさん
12/09/10 14:03:16.08
2007以降だっけ、図形や画像のオブジェクト仕様が変わってるから
その影響じゃね確かめてないけど
208:デフォルトの名無しさん
12/09/10 14:23:25.83
>>202
コードも貼らずに・・・VBAでコピペといっても丸ごと・値だけ・図だけ・云々
値だけコピぺのコードになっていないか?
209:デフォルトの名無しさん
12/09/10 15:30:15.55
再現できたよ
import 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'))
210:デフォルトの名無しさん
12/09/10 15:36:44.24
きもっ
211:デフォルトの名無しさん
12/09/10 15:39:18.22
こっちのコードなら図形も正しくコピペされたよ
import 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'))
212:デフォルトの名無しさん
12/09/10 15:43:04.57
Select って恥ずかしいよね
213:デフォルトの名無しさん
12/09/10 15:50:50.02
なんでVBAのコードにしないんだろう?
214:デフォルトの名無しさん
12/09/11 11:33:18.80
中二病だから