[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 09/13 22:18 / Filesize : 58 KB / Number-of Response : 215
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

Excel VBA 質問スレ Part26



1 名前:デフォルトの名無しさん mailto:sage [2012/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
toro.2ch.net/test/read.cgi/tech/1341722983/


39 名前:35 [2012/08/24(金) 08:21:39.84 ]
残念ながら白桃には感謝できん
グローバル変数なんて野蛮なものは使ってないからだ

40 名前:桃白白 [2012/08/24(金) 08:29:22.43 ]
>>39
いいやお前はグローバル変数を使っている
使っていないと思い込んでいるだけだ
桃白白は上級者だがお前は初心者だ
初心者は上級者の言うことを素直に聞くべきだ
お前はグローバル変数を使っている お前はグローバル変数を使っている 目を閉じて反芻しろ

41 名前:35 [2012/08/24(金) 08:33:19.36 ]
>>40
のび太のくせに生意気だ

42 名前:デフォルトの名無しさん mailto:sage [2012/08/24(金) 11:37:23.01 ]
VBA触り始めて数日の初歩的な質問ですみません。
環境はWindows7、Excel2007です。
ユーザーフォーム上のテキストボックスに
セルをリンクさせたいのですが、テキストボックスのプロパティの
Text欄、Value欄に「=Sheet1!A1」と入れても「」内の文字列が
そのまま表示されてしまいます。
Excelのシート上のテキストボックスで同じ操作をすると
そちらはきちんとセルがリンクされるのですが…。

43 名前:デフォルトの名無しさん mailto:sage [2012/08/24(金) 11:49:49.47 ]
>>42
ユーザーフォームのテキストボックスなら
「=Sheet1!A1」を入れるのはControlSource

44 名前:へっぽこエスパー mailto:sage [2012/08/24(金) 12:34:01.86 ]
>>35
エラーメッセージとか出ないの?
Excel2007だとこんなバグもあるみたいだけど
support.microsoft.com/kb/971594/ja

45 名前:デフォルトの名無しさん mailto:sage [2012/08/24(金) 12:34:21.37 ]
>>43
おおおおお!出来た!
これでとりあえず形だけは完成しました。
ありがとうございます

46 名前:デフォルトの名無しさん mailto:sage [2012/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 名前:へっぽこエスパー mailto:sage [2012/08/24(金) 15:54:05.98 ]
>>46
各コマンドボタンのクリックイベントに
Sheet2.Cells(1,1) = "= SUM(Sheet1!C:C)"
って入れといたらどうですか?

あと、On/Offの2値を扱いたいなら
コマンドボタンよりトグルボタンのほうが良くないですか?



48 名前:デフォルトの名無しさん mailto:sage [2012/08/24(金) 22:39:47.47 ]
>>46,47
まずControlSource使うのやめて、
各ボタンのクリックイベントに、TextBox1.Text = Sheet2.Range("A1").Valueとか書くのが正解だろ
(つかそう書いたサブルーチン呼べ)

というかまずボタンを重ねて配置するとか馬鹿なことをやめろよ


49 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 11:19:20.04 ]
埋め込みグラフの目盛り線を選択したいのですが、エラーになってしまいます。

ActiveSheet.ChartObjects(1).Chart.Axes(xlValue).MajorGridlines.Select
どこを直せばいいですか。

50 名前:デフォルトの名無しさん [2012/08/25(土) 11:59:34.26 ]
シートに挿入したチェックボックスが消せません。
どこを直せばいいのですか。

Activesheet.Shapes.Delete

51 名前:桃白白 [2012/08/25(土) 12:04:08.98 ]
>>49
なんというエラーが出る?桃白白にもわかりそうなエラー?
わかりそうなやつだったら答えちゃうけど

52 名前:桃白白 [2012/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 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 13:12:04.08 ]
>>47
>>48
役割はトグル以外の何物でもないのですが、
クリックすると白黒画像からカラーに変わるギミックを
どうしてもやりたくて、方法がわからずこのような原始的な方法を取りました。

各ボタンに記述してみます。ありがとうございました

54 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 13:26:17.55 ]
>>49
選択しようとするからじゃないの?
ActiveSheet.ChartObjects(1).Activate

55 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 14:32:05.25 ]
>>54
ActiveSheet.ChartObjects(1).Activate
ActiveSheet.ChartObjects(1).Chart.Axes(xlValue).MajorGridlines.Select
できましたwありがとうございます

56 名前:桃白白 [2012/08/25(土) 14:40:56.33 ]
>>55
そんなの桃白白認めない

57 名前:デフォルトの名無しさん mailto:sage [2012/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 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 17:32:32.39 ]
>>57
ちゃんと宣言されてないよ


59 名前:デフォルトの名無しさん mailto:sage [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をやっていたというわけだ

60 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 18:25:24.46 ]
初心者じゃ無いつもりだけど未だに分からないのがdecimal。
なんで宣言出来ないんだ??

61 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 18:49:27.72 ]
>>60
仕様に対して「なんで」って言い出したらキリがない

62 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 18:50:38.91 ]
現在、10 進型はバリアント型 (Variant) の内部処理形式でのみ使用できます。変数を 10 進型として宣言することはできません

ってヘルプに書いてあるから、そういう仕様だとしか


63 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 19:10:26.70 ]
ある程度割り切りも必要だけど、
何事にも疑問を持って追求しようとする姿勢が無いとダメだよ。

64 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 19:33:44.95 ]
調べれば仕様だって事はすぐわかるんだが、追及なんて全くしてないだろ

なんでそういう仕様なのか考えるのはまだ意味があるかもしれんが

65 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 21:27:58.33 ]
一応Currency型があるから。
誰も覚えてなさそうだけどw

66 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 21:29:55.49 ]
57です

59様、ありがとうございます。
てっきり複数列挙してもまとめて型宣言できるものと思っていました。


67 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 22:39:09.50 ]
セルにAlt+Enterで改行したデータを
ユーザーフォームのTextboxに入れようとしても
改行してくれないんですね。
何かいい方法はないですか?



68 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 22:44:36.80 ]
>>67
たぶん MultiLineがFalseになってるだけだと



69 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 23:10:05.12 ]
>>68
ありがとう!

70 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 03:13:42.98 ]
>>63
追求する意味があるものと無いものを見極める能力も無いとダメだよ

何も解ってない状態で割り切って諦めるのと、追求する意味がないことを見極めて
無駄な愚考をしないのは違うからね

71 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 09:14:57.64 ]
おまいらが作ったクラスモジュール教えてくれ
使える、別のアプリ専用、面白い、誰得と何でもいいわ

72 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 09:46:58.31 ]
>>71
具体性のない質問というかネタクレクレはスレ違い
>>2でも行くかググって漁れ

73 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 19:11:36.33 ]
ソート用クラスなら。
並び替えられるデータは数字の入った配列で、
比較メソッドはイベントとして使う側で実装する形。
数字=インデックスとして見れば、どんな内容のソートにでも使える。

74 名前:デフォルトの名無しさん mailto:sage [2012/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 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 23:19:45.24 ]
ユーザーフォーム使えば良いだけだと思うよ

76 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 23:40:00.07 ]
使う方が嫌じゃなければカンマで区切るとか

77 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 23:54:40.85 ]
あとはforで二回まわすとか?
ユーザーフォームが一番スマートだと思うけどね



78 名前:74 mailto:sage [2012/08/27(月) 00:50:32.74 ]
ユーザーフォームって本を買ってきてVBを独学したときに作った記憶があるな

クリップボードから拾わせた文字列を入力の初期値にして
文字列を入力したらVBに取り込んで
シートのフィルターの指定フィールドで抽出させるというのを作ったんだけど
やっぱり複数の文字列で同時にフィルターを掛けたいときが時々ある

同じ内容なんだけど、入力した時期によってキーワードが違っているときとか

79 名前:デフォルトの名無しさん mailto:sage [2012/08/27(月) 01:07:36.07 ]
解読しづらい文章だな

80 名前:デフォルトの名無しさん mailto:sage [2012/08/27(月) 21:04:53.28 ]
各セルの文中の最初に「★」がついてるものだけを探して「★」だけを消すのはどうすればよいでしょうか
最初でないところ(文中)にも「★」が出てくることがあるので検索して丸ごと置換というわけにもいかず困っています
よろしくお願いします

81 名前:デフォルトの名無しさん mailto:sage [2012/08/27(月) 21:21:09.13 ]
>>80
Range.Findで探して、Mid$関数で消せば良いんじゃないか?
その条件ならワイルドカードが使えるし。

82 名前:デフォルトの名無しさん mailto:sage [2012/08/27(月) 22:37:49.14 ]
    Selection.Replace What:="★*", Replacement:="", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

たんに全体一致で"★*"を""で置き換えるだけだが。VBAいらね

83 名前:デフォルトの名無しさん mailto:sage [2012/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 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 00:23:11.36 ]
if instr(hoge,"★") = 1 then
right(hoge,len(hoge)-1)

85 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 05:54:18.56 ]
エクセルでwavファイルを取り込んでmp3で保存することは可能でしょうか?

86 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 06:18:10.50 ]
常識だろw

87 名前:デフォルトの名無しさん [2012/08/28(火) 07:15:53.67 ]
>>85
エクセルでやる意味について



88 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 07:30:31.18 ]
>>85
世の中広いな

89 名前:桃白白 [2012/08/28(火) 07:31:22.12 ]
>>87
エクセルはみんなのツールだ。フロントエンドをこしらえるのならなかなかいんじゃないか。

90 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 07:35:55.08 ]
>>85
可能だけどスレ違い

91 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 19:27:40.17 ]
マクロ1でマクロ2を走らせる時、どちらも同じ変数名を使っているのですが問題ないですか?
それぞれのマクロの中で値を指定していれば大丈夫ですよね?
一応動くのですがちょっと不安なので詳しく教えてください

92 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 19:29:55.84 ]
変数にはスコープって概念があってな
大丈夫かどうかはソースみないと何とも言えん


93 名前:デフォルトの名無しさん [2012/08/28(火) 19:44:37.89 ]
Public変数を知らなそうなので大丈夫でしゅ

94 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 20:57:27.14 ]
ユーザー定義関数の引数にrangeオブジェクトを指定した場合、
その値が数値の場合は配列に入れ直した方が処理は軽くなるのですか?
範囲は固定ではなく任意です。

環境なくて試せません。お願いします

95 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 21:15:15.96 ]
軽くって?
配列に移し替える時にループ使うから意味ないと思うけど

96 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 21:47:07.44 ]
>>95
失礼しました、シートから関数を直接呼び出すと挙動が重かったので軽くとかきました。

たしかにループしたら効果半減ですね…




97 名前:デフォルトの名無しさん mailto:sage [2012/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 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 22:43:26.96 ]
自力で関数を書く

99 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 22:46:56.48 ]
>>97
Worksheet_SelectionChangeでググってみたらどう?

100 名前:デフォルトの名無しさん mailto:sage [2012/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 名前:デフォルトの名無しさん mailto:sage [2012/08/29(水) 00:57:03.37 ]
>>96
ユーザー定義だとどう書いても重いよね

102 名前:デフォルトの名無しさん mailto:sage [2012/08/29(水) 07:25:09.73 ]
>>100
ありがとうございます。
引数をvariantにしてしまえばいいのですかね。
試してみます。

>>101
エクセル使う人は、直感的使いたいようで。
配列数式とか駆使して挙動みながら無理のない範囲で作るしかないですよね。

103 名前:桃白白 [2012/08/29(水) 11:37:02.40 ]
>>97
Friendpaste - SortWithForeinKey
https://friendpaste.com/2SD94Big6C5rrUcyFYuphe

桃白白が全力で実装したから試してみて

104 名前:デフォルトの名無しさん mailto:sage [2012/08/30(木) 15:06:34.82 ]
VBA勉強して2日目のド初心者です

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ページ目にあるテキストボックスオブジェクトを指定する方法が分かりません。
やり方のヒントを教えて下さい。

105 名前:デフォルトの名無しさん mailto:sage [2012/08/30(木) 15:23:23.59 ]
ド素人すぎてクラクラするなw

106 名前:デフォルトの名無しさん mailto:sage [2012/08/30(木) 16:23:19.37 ]
そんなこと言うくらいなら教えてあげなよ

107 名前:デフォルトの名無しさん mailto:sage [2012/08/30(木) 16:27:27.69 ]
for eachで回せばいいんだよ



108 名前:桃白白 [2012/08/30(木) 17:52:44.75 ]
>>104
画像ではText Box 7って2ページ目のテキストボックスなんでない?
ページ変わってもテキストボックス取得する方法は変わらんだろ
テキストボックスを選択したら左上にテキストボックスの名前が表示されるから、そこに桃白白と入力して
ActiveSheet.Shapes("桃白白").TextFrame.Characters.Textでいけるっしょ

109 名前:デフォルトの名無しさん mailto:sage [2012/08/30(木) 23:44:46.08 ]
対象のブックが開いているか調べるのにはどうしたらいいですか?
もし、開いていたらそのままシートの内容をコピーして、
開いていなかったら、開いてコピー後、対象ブックを閉じる
というのをやりたいです。


110 名前:デフォルトの名無しさん mailto:sage [2012/08/30(木) 23:53:28.43 ]
馬鹿には無理

111 名前:桃白白 [2012/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 名前:デフォルトの名無しさん mailto:sage [2012/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 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 07:10:08.53 ]
馬鹿には無理

114 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 08:24:31.30 ]
Auto_Open が走るかどうかで判定できる気がする

115 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 08:44:54.04 ]
>>112
A.xls側が判断するタイミングはいつ?いつでも?

116 名前:デフォルトの名無しさん [2012/08/31(金) 09:55:33.99 ]
>>112
他ブックからオープンしたときは
A.xlsのどこか任意のセルにその呼び出し元を記述させるようにしたら良いんでない?
たとえばB.xlsからオープンしたら

Workbooks.open(A.xls)
Activeworkbook.sheets(1).cells(1,1)="B.xls"

みたいに

117 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 10:34:50.97 ]
www.officiallyjd.com/wp-content/uploads/2012/06/20120618_kinashi_15.jpg



118 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 12:16:22.91 ]
>>112
www.moug.net/tech/exvba/0060076.html
これ参考にならないかな?

119 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 16:48:56.27 ]
質問です
変数 = A1.value

A1のセルには、文字列helpme
となっているところを

A1にhelp
A2にme
としたとき、

変数= なんて.value書けばいいですか?

120 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 17:13:04.83 ]
range("a1").value & range("a2).value
ってことか?

121 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 17:13:52.47 ]
>>119
質問するならちゃんとしたコードで書いてよ
普通に考えて
変数 = A1.value
は「セルA1の値を変数に代入する」という意味のコードとしては
まともなコードとはいえない

これが「セルA1の値を変数に代入する」という意味のコードとして成立するためには
表記中の「A1」が「セルA1を意味するオブジェクト変数」である必要があるけど
それは>>119の質問内容からは確定できない

ちゃんと動作するコードとして書くなら
変数 = Cells("A1").Value
みたいに書いてないとおかしい

で、そういう意味であるなら
変数 = Cells("A1").Value & Cells("A2").Value
とすれば要求を満たせる

122 名前:桃白白 [2012/08/31(金) 17:25:14.21 ]
もしくはこうか
Range("A2") = Right(Range("A1"), 2)
Range("A1") = Left(Range("A1"), 4)

123 名前:デフォルトの名無しさん [2012/08/31(金) 17:41:04.79 ]
>>122
それは意味が違うんじゃない?

124 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 18:30:31.90 ]
お前ら相変わらずエスパーだな俺には何言ってるのかわからん

125 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 18:40:22.16 ]
>>124
>>119は意味分からんでもそれへの回答で理解できただろ

126 名前:112 mailto:sage [2012/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 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 20:12:25.23 ]
>>120
これでできますた!!!ありがとう!



128 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 20:16:13.19 ]
こんにちは!質問です!

エクセルファイルを開いている日(毎日)からみて次の月曜日の日付を取得するにはどうすればいいですか?

つまり火曜日に開いても木曜日に開いても来週の月曜日の日付を表示し、来週には再来週の日付を表示するということです。

129 名前:112 mailto:sage [2012/08/31(金) 20:31:39.46 ]
>>128
=TODAY()+9-WEEKDAY(TODAY())

月曜日に開いた場合の処理が指示されていないから、そこはつけたしてくだしあ。

130 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 20:34:43.70 ]
name消し漏れ+
日曜日の判定も必要ですな。>129だと不完全です。

WEEKDAY(TODAY()) = 0と1のとき分岐してください。

131 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 21:13:03.84 ]
>>126
>>114はダメだったのか?

132 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 21:14:54.31 ]
セルに文字としてプラスの記号入れ方教えてください。

133 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 21:17:13.60 ]
>>132
全角文字で

134 名前:デフォルトの名無しさん mailto:sage [2012/08/31(金) 21:18:26.75 ]
ありがとうございます

135 名前:デフォルトの名無しさん mailto:sage [2012/09/01(土) 00:26:56.53 ]
>>130
これってどういう意味?

136 名前:デフォルトの名無しさん mailto:sage [2012/09/01(土) 00:36:13.97 ]
多分解決しますた

137 名前:>112 >126 mailto:sage [2012/09/02(日) 03:17:58.59 ]
>>131(>>114)
初めて知りました。
できそうですね。
ありがとうございます。




138 名前:デフォルトの名無しさん mailto:sage [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をコメントブロックすると、ループは廻ります、何がいけないのでしょうか?


139 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 22:03:18.22 ]
×End
○End If

140 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 22:03:38.33 ]
>>138
end じゃなく end ifでは?

141 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 22:04:45.00 ]
>>138
最後から2行目の「End」は「End If」でしょ。

142 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 22:13:18.95 ]
あっ!ミスってた

有り難うみんな

143 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 23:06:48.44 ]
ここって資格試験について質問しても大丈夫でしょうか?
公式テキストの解答で1つ理解できないものがありまして・・・。

144 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 23:13:57.52 ]
既に終った試験だとしても、出題内容をこういうところで漏らすことが
非常識な行動じゃないと思えるほどのバカなら好きにしたらいいさ。

145 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 23:48:20.43 ]
>>144
いや、実際の試験では無くて公式テキストのサンプル問題です。
ちょっと理屈が良く分からない部分がありまして。

146 名前:デフォルトの名無しさん mailto:sage [2012/09/03(月) 00:14:38.18 ]
何でも良いから晴れよ

147 名前:デフォルトの名無しさん mailto:sage [2012/09/03(月) 01:33:06.43 ]
福沢諭吉「脱亜論」 1885年3月16日 時事新報

日本の不幸は中国と朝鮮だ。
この二国の人々も日本人と同じく漢字文化圏に属し、同じ古典を共有しているが、
もともと人種的に異なるのか、教育に差があるのか、 日本との精神的隔たりはあまりにも大きい。
地球規模で情報が行き来する時代にあって、近代文明や国際法について知りながら、
過去に拘り続ける中国・朝鮮の精神は千年前と違わない。
国際的な紛争の場面でも「悪いのはお前の方だ」と開き直って恥じることもない。
もはや、この二国が国際的な常識を身につけることを期待してはならない。
「東アジア共同体」の一員として その繁栄に与ってくれるなどという幻想は捨てるべきである。
日本は、大陸や半島との関係を絶ち、 欧米と共に進まなければならない。
ただ隣国だからという理由だけで特別な感情を持って接してはならない。
この二国に対しても、国際的な常識に従い、国際法に則って接すればよい。
悪友の悪事を見逃す者は、共に悪名を逃れ得ない。
私は気持ちにおいては「東アジア」の悪友と絶交するものである。

         _,,,,,,__  __,,,__
        ィjj)))))))))!!!!!彡ヽ,
      /ミ/         ,}彡ヘ
      |ミ{ -‐ ‐ ‐ ‐-  {三=|
      El==; ゚ ''==. |ミミ,|
        `レfォ、,〉 :rfォ.、,  !iル┤
.        { `¨ i ・、¨ ´  `{ゞ'} 支那、朝鮮とは
.        | '`!!^'ヽ     .「´  付き合うなと忠告しておいたのに。。。
        ! ,-ニ'¬-、  ,!|,_   
.        \´?`  / ∧ヘ、
         __/〉`ー ' ´ /  〉 \
     _, ィ´「∧     /  /    」¬ー- 、_
  -‐ ´  / /  ヽ、/    /     iヾ      ヽ



148 名前:デフォルトの名無しさん mailto:sage [2012/09/03(月) 14:20:50.18 ]
>>144
公式テキストの問題と解答をまるごとここに書くのならともかく、納得できない一問について
ここに書くことのどこに問題があるのか?

149 名前:桃白白 [2012/09/03(月) 15:19:53.53 ]
引用の範疇なら問題ないだろ
VBAの設問なのか? 何だったら桃白白がお答えしちゃうけど? 貼っちゃいなよ

150 名前:デフォルトの名無しさん mailto:sage [2012/09/03(月) 20:55:59.52 ]
>>145
気になるから貼ってくれよ

151 名前:デフォルトの名無しさん [2012/09/03(月) 21:54:07.61 ]
質問です。環境はwindows XP , Excel2003です

エクセルファイルをメールで送信するコード、つまり

Application.Dialogs(xlDialogSendMail).Show

を使いましてメールを送信する際、引数の"Arg1"つまり「メール宛先」に
複数人のアドレスを入れる関係上、宛先文字列が256文字を超えてしまいます。
255文字以内に収めれば、上手くメーラーが起動してメール送信準備が
されるのですが、256文字を超えると、エラーが出るわけでもなく
ただメールが立ち上がらないという状態になります。

対策をする前に、なぜここで256文字を超えたらダメなのか、を一応
知っておきたいです。どなたか、知っていたら教えてください!

152 名前:デフォルトの名無しさん mailto:sage [2012/09/03(月) 22:24:12.60 ]
>>151
容量的な問題255バイトまで

153 名前:デフォルトの名無しさん mailto:sage [2012/09/03(月) 22:27:48.90 ]
ExcelVBAでLifeGameを作った( https://www.dropbox.com/s/kntdvpijtpdje90/LifeGame.xlsm )
のですが、10世代ぐらいループさせるとExcelが固まります
何が原因か教えていただけませんか?

Windows 7 Ult x64、Excel 2010です

154 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 00:07:02.26 ]
多量のテーブルデータがあったとして、
ワークシートとデータベースって
どっちを使おうっていう判断基準を教えてください
ファイルサイズを考えて、どちらも外部ファイルにデータを置くとした場合。

155 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 00:24:44.36 ]
>>154
具体例を挙げてくれれば助言はできるけど
そんなもん一概に言えないよ

156 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 00:30:58.40 ]
データ数が1万レコード以上ある時はアクセスを使うべき

157 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 00:40:54.73 ]
>>155
1000×3ぐらいの数値テーブルが、数十個あって
ランダムな場所を幾度も読み込んで計算するような感じです
速度が求められます

シートにおさまるんだけど、どちらがいいのかな〜と。



158 名前:157 mailto:sage [2012/09/04(火) 00:48:49.04 ]
ちなみに、今はワークシートのデータをdllに投げて、処理して値を受け取るようにしているんだけど、
配布やら設定やらの問題でvbaで完結させたい。

159 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 01:03:28.50 ]
アクセスじゃなくてエクセルでdbやってみりゃいいじゃん

160 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 01:19:21.98 ]
メモリに乗りきらないとか、ワークシートに収まらないほどのデータがあるならDB
それ以外なら好きにしろ


161 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 04:33:32.77 ]
>>157
その程度のデータ量なら配列に一気に読み込んでから計算するのが一番処理が速い

162 名前:桃白白 [2012/09/04(火) 05:52:03.40 ]
>>153
スリープのあとにDoEventsを呼ぶようにしたら
10000回ループしても問題なかったよ

Call VBA.Interaction.DoEvents

理屈は知らん、寝るのに忙しくて表示を更新できません的なことなんじゃね

163 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 06:51:00.28 ]
何かというと配列云々をいうアホがいるがそれだけじゃまったく不十分
アルゴリズムの方が大事だ

164 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 07:11:04.98 ]
アルゴリズムの方も大事だ、だろ
シートとのやり取りのコストも、これはこれで馬鹿にならないよ。

>>153
x64Win8+Excel2013で動かしてみたけど固まりはしないな。
ただ、ESCキーでの実行中断が何故か効かなくなった。

165 名前:153 mailto:sage [2012/09/04(火) 07:57:06.49 ]
>>162
固まらなくなりました。ありがとうございます
ちょっと理屈調べてみたいと思います
>>164
環境にもよるみたいですね。テストありがとうございました

166 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 09:26:27.40 ]
>>153
余計なお世話かも知れないが、
プログラムが動作するしない以前の問題として
変数の宣言が間違ってる。
dim a,b as integer
だと、aがVariant型、bがInteger型になる。
あと、変数名間違ってるのが数カ所あった。
Option Expricitで変数の宣言を強制する癖をつけた方が良いと思う。

167 名前:166 mailto:sage [2012/09/04(火) 09:31:39.92 ]
綴り間違えた
×Expricit
○Explicit



168 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 18:33:21.31 ]
これは恥ずかしい。

169 名前:151 [2012/09/04(火) 18:52:25.13 ]
>>152
ありがとうございます。その255バイトまでっていうのが
何の仕様なのかが、どうも掴めなくて気持ち悪いんです。

変数の型はバリアントにしているので、変数の型によって255バイト
っていう制限がかかるわけじゃないし
Application.Dialogs(xlDialogSendMail).Show の引数は255バイト
までと決まっている(仕様)、ということなんでしょうか?



170 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 19:26:37.09 ]
>>169
メールのtoフィールドが255バイト以下ってのはRFCで決まってたはず
それ以上送りたい場合はtoフィールド自体の数を増やせばいいんだけど、
受け取った側から見るとあんまり気分の良い物じゃないのでBCCなどを使った方がいい

171 名前:桃白白 [2012/09/04(火) 20:06:56.45 ]
>>170
マジで!? メールアドレスの最大の長さが255文字でTOが複数のアドレスを含むことが
できるとするなら理屈としてはTOは255文字以上を許容しないといけないんじゃね?

>>151
配列でアドレスを指定できるんじゃね?
Application.Dialogs(xlDialogSendMail).Show Array("桃白白さん", "ブルマさん")
みたいにして

172 名前:153 mailto:sage [2012/09/04(火) 20:29:08.45 ]
>>166
まじかよVBA糞だな首吊ってきます

173 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 23:30:33.17 ]
>>169
自作鯖ならsendmailmaxなんちゃらみたいな設定がたぶんhtod.confとかにあると
思ったけど
to Cc Bccでの上限数はあまり変わらないんじゃないか

174 名前:デフォルトの名無しさん mailto:sage [2012/09/05(水) 00:43:55.42 ]
>>172
VBAがというか大本のVBがそういう仕様だからなぁ
つか知らなきゃそう書いちゃうよな

175 名前:デフォルトの名無しさん mailto:sage [2012/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 名前:デフォルトの名無しさん [2012/09/07(金) 12:47:57.33 ]
ExcelのVBAについて学ぼうと思っています。
まだまだ初心者なので、VBAについてお詳しい方、
ExcelのVBAでのテーブル作成方法を教えてください。

177 名前:デフォルトの名無しさん [2012/09/07(金) 12:51:57.92 ]
↑入力項目は@入力年月日A転出入りフラグ1、転入2、転出(選択すると自動的にカウントアップ)B氏名C新住所D性別
E年齢F生年月日F職業G男性人口±H女性人口±I全体の人口±といったところです。
このデーターを格納し帳票に飛ばしカウントアップしてデイリー分の男性、女性の転出、転入を出力データとしてまとめ
総人口数を求めるようにしたいのですが。



178 名前:デフォルトの名無しさん mailto:sage [2012/09/07(金) 13:06:18.19 ]
馬鹿には無理

179 名前:桃白白 [2012/09/07(金) 13:34:55.59 ]
>>175
Excel 2007 で Shapes オブジェクトのインデックスに不正な値 0 を指定してもエラーにならない
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

180 名前:桃白白 [2012/09/07(金) 13:39:04.73 ]
>>176
データベースがメインになるんなら
Accessでやっちゃった方がよくね?

181 名前:デフォルトの名無しさん mailto:sage [2012/09/07(金) 13:58:48.61 ]
access高いから避けたい

182 名前:桃白白 [2012/09/07(金) 14:17:45.26 ]
>>181
データベースに何を使うかは決まってんの? MDB?

183 名前:デフォルトの名無しさん mailto:sage [2012/09/07(金) 15:37:49.26 ]
PostgreSQLが良い

184 名前:桃白白 [2012/09/07(金) 19:38:37.15 ]
>>183
ゾウさんのやつな、かっけーよな

185 名前:デフォルトの名無しさん mailto:sage [2012/09/08(土) 02:27:32.71 ]
教えて下さい。
excel vba でIE object のコントロールで
ajaxを起動できますか?
fireeventでjavascriptはわかったのですが
selectにonclickがなくajaxでload window
しているものがありどう呼び出せばよいか
悩んでます

186 名前:デフォルトの名無しさん mailto:sage [2012/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 名前:デフォルトの名無しさん [2012/09/08(土) 08:35:29.78 ]
重ねたバケツが抜けないのですが、何か良い方法はあるでしょうか?



188 名前:デフォルトの名無しさん [2012/09/08(土) 09:29:19.83 ]
外側のバケツのみ熱します

189 名前:187 [2012/09/08(土) 09:30:46.59 ]
どうやって熱しますか?

190 名前:デフォルトの名無しさん mailto:sage [2012/09/08(土) 09:41:15.34 ]
油を注いで熱します

191 名前:デフォルトの名無しさん mailto:sage [2012/09/08(土) 09:48:31.79 ]
>>185
的外れかもしれないけどブックマークレットで呼ぶとか?
shokai.org/blog/archives/1234

192 名前:デフォルトの名無しさん mailto:sage [2012/09/08(土) 20:57:56.13 ]
>>177
DAOとかADOとかでExcelをRDBみたいにSQLで扱えるから
そういう感じでやれば良いんでね
やり方はググって好きな方法選んでくれ

193 名前:桃白白 [2012/09/09(日) 01:50:11.99 ]
みんな聞いて。桃白白のExcelの使用期限が終わりそう、繰り返す、桃白白のExcelの使用期限が終わりそう。

194 名前:デフォルトの名無しさん mailto:sage [2012/09/09(日) 02:17:54.45 ]
Excelって使用期限が設けられているライセンス体系もあったんか
次買うときはケチらずに無期限ライセンスのを買えよ

195 名前:桃白白 [2012/09/09(日) 02:27:17.22 ]
>>194
桃白白貧乏だから買えないの。寄付する? するんだったら桃白白はその好意を決して断らない
ことをここに誓う用意があるけど?

196 名前:デフォルトの名無しさん mailto:sage [2012/09/09(日) 04:13:41.72 ]
パソコンをリカバリすればまた体験版が使えるようになるよ

197 名前:デフォルトの名無しさん [2012/09/09(日) 07:12:31.16 ]
>>195
互換Office使えばタダだよ
VBA使えないけど



198 名前:デフォルトの名無しさん mailto:sage [2012/09/09(日) 07:31:11.37 ]
貧乏だけど知識が豊富で頭も良くて有用な回答者にならOfficeくらい寄付してもいいが、
貧乏な上に知識も多少の回答は出来るが並以下レベルで、頭の回転も弱い奴となると、
べつに回答者を続けてくれなくても誰も困らないから、Excelの使用期限と共に消えてくれて
一向に構わないな

199 名前:桃白白 [2012/09/09(日) 10:38:47.13 ]
   ∧∧
   /⌒ヽ)
  i三 ∪
 ○三 |
  (/~∪
  三三
 三三
三三三

200 名前:デフォルトの名無しさん [2012/09/09(日) 15:24:00.49 ]
>>199
俺も貧乏だから寄付しないけどタオパイパイ嫌いじゃないよ
これからは回答せずに
にぎやかしでAA貼ってりゃいいじゃん

201 名前:デフォルトの名無しさん mailto:sage [2012/09/09(日) 15:26:03.47 ]
私の声がデムパになって
波になってあなたへ向かってく
私の歌がデムパになって
波になってあなたへ響いてく
私の愛がデムパになって
波になってあなたへ届いてく
私の電子回路が短絡する前に
Electric LOVE Electric LOVE
(∩ ゚д゚) アーアー
この気持ちあなたに届くかな

202 名前:デフォルトの名無しさん [2012/09/10(月) 11:09:37.38 ]
VBAであるセル範囲をコピペして他のシートに貼り付けたとき
図のオブジェクトがどういうわけかコピペされないんです。
どうすればこの図のオブジェクトも正しくコピペされて他のシートにも表示させるようにできますか?

203 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 11:21:30.08 ]
馬鹿には無理

204 名前:202 [2012/09/10(月) 11:31:04.49 ]
>>203みたいな馬鹿には回答は無理なのは分かりますよ。

205 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 11:37:58.19 ]
ただ図がセル範囲からはみ出してるだけじゃないのか?

206 名前:202 [2012/09/10(月) 11:40:24.57 ]
いえ、しっかりセル範囲内におさまっています。
列は3、行は20くらい、
図はちょうどど真ん中あたりにあり、1つのセルと同じくらいの大きさなのに。

207 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 14:03:16.08 ]
2007以降だっけ、図形や画像のオブジェクト仕様が変わってるから
その影響じゃね確かめてないけど



208 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 14:23:25.83 ]
>>202
コードも貼らずに・・・VBAでコピペといっても丸ごと・値だけ・図だけ・云々
値だけコピぺのコードになっていないか?



209 名前:デフォルトの名無しさん mailto:sage [2012/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 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 15:36:44.24 ]
きもっ

211 名前:デフォルトの名無しさん mailto:sage [2012/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 名前:デフォルトの名無しさん [2012/09/10(月) 15:43:04.57 ]
Select って恥ずかしいよね

213 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 15:50:50.02 ]
なんでVBAのコードにしないんだろう?

214 名前:デフォルトの名無しさん mailto:sage [2012/09/11(火) 11:33:18.80 ]
中二病だから






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

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

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