Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


214 / 3841 ページ ←次へ | 前へ→

【78169】Re:グラフ作成 指定範囲をCellsで
発言  β  - 16/5/7(土) 16:20 -

引用なし
パスワード
   ▼Ken さん:

範囲が変化するため ということですので、そのへんかする領域がどこかは
把握しなければいけませんし把握できるということですね。

であれば、Range を使おうが Cells を使おうが、それは好きなほうでいいのですが

ActiveChart.SeriesCollection(2).XValues = "='sheet1'!" & その領域オブジェクト.Address

でいけますけど。
・ツリー全体表示

【78168】グラフ作成 指定範囲をCellsで
質問  Ken  - 16/5/7(土) 15:34 -

引用なし
パスワード
   VBA初心者です。
グラフ作成をしたく、マクロの記録で
ActiveChart.SeriesCollection(2).XValues = "='sheet1'!$J$7:$J$30000"
となったところを、範囲が変化するため、
$J$7:$J$30000ではなく、Cellsで指定したいです。
どのように書けばのでしょうか。
よろしくお願いします。
・ツリー全体表示

【78167】Re:macでSQLを使った検索処理を行...
お礼  ひつじ  - 16/5/5(木) 23:57 -

引用なし
パスワード
   ▼γ さん:

ご指摘いただいていた件について、
ActiveXコントロールがサポートされていない時点で、ADO接続ができないので、そもそも記載したSQLを利用した方法では無理だったのですね。
SQLを利用しない処理を組むことで解決をすることにしました。
ありがとうございました。

これで、この件についてクローズとさせていただけたらと思います。
不快な気分にさせてしまい、大変申し訳ございませんでした。
・ツリー全体表示

【78166】Re:macでSQLを使った検索処理を行...
回答  ひつじ  - 16/5/5(木) 19:45 -

引用なし
パスワード
   ▼γ さん:
>> その先の英語がわからなく、どうインストールしたらいいのか分からない状態です。
>英語を翻訳して自分に説明してくれないか、ということですか?
>それを見ていませんが、普通は誰にもわかるように書いてあるんじゃないですか?
>具体的に、インストールしたけれどこういうエラーが発生してしまう、
>といった質問なら分からんでもない。
>しかし、インストールの説明すら分からないなら、
>そういうことをする資格が備わっていない(失礼)ということなので、
>macではなく、windowsを使うことをお勧めします。
>今後も、同じようなことが色々と出てくるはずですから。

失礼いたしました。
ご指摘いただきまして、ありがとうございます。

仰るとおりですね。
焦っていたとはいえ、申し訳ございませんでした。

インストールをして進めてから
改めてご質問させていただきたいと思います。

ちなみに、失礼を承知でお伺いしたいのですが、
今回、実行したいと思っているExcel for Mac上で、SQLを利用した処理の情報が載っているサイトや、勉強するのに良いサイトなどありましたら、検索ワードなどを教えていただけたら幸いです。

何卒よろしくお願いいたします。
・ツリー全体表示

【78165】Re:macでSQLを使った検索処理を行...
発言  γ  - 16/5/5(木) 19:26 -

引用なし
パスワード
   > その先の英語がわからなく、どうインストールしたらいいのか分からない状態です。
英語を翻訳して自分に説明してくれないか、ということですか?
それを見ていませんが、普通は誰にもわかるように書いてあるんじゃないですか?
具体的に、インストールしたけれどこういうエラーが発生してしまう、
といった質問なら分からんでもない。
しかし、インストールの説明すら分からないなら、
そういうことをする資格が備わっていない(失礼)ということなので、
macではなく、windowsを使うことをお勧めします。
今後も、同じようなことが色々と出てくるはずですから。
・ツリー全体表示

【78164】macでSQLを使った検索処理を行いた...
質問  ひつじ  - 16/5/5(木) 18:45 -

引用なし
パスワード
   はじめて、投稿させていただきます。

現在、Win環境で作っていた、SQLを用いたExcel内の値の検索を、
Excel for Mac 2011上でも実行させたいのです。
調べてみたのですが、分からなく、こちらの質問箱にたどり着きました。

自分のわかっていると思っている事は、
@Excel for Mac 2011用のODBCドライバーのインストールが必要
AActiveXコントロールは使えない

@のインストールに関しては、Microsoftの「Excel for Mac 互換 ODBC ドライバー」の場所までたどり着いたのですが、
その先の英語がわからなく、どうインストールしたらいいのか分からない状態です。

Aの使えないということに関しては、ActiveXコントロールがサポートされていないという記述を見つけたのですが、
使えなくても問題ないという認識でおります。


この検索プログラムをExcel for macでも実行されるようにしたいですが、ご教示いただけませんでしょうか。
よろしくお願いいたします。

※大変申し訳ございません。仕事の状況が不安定なため反応が遅くなります。


下記にWinで実行しているコードを載せさせていただきます。

'******************************
'データベース処理(検索)
'******************************

Private Sub CommandButton1_Click()
  On Error GoTo Error_Handling

  '変数定義
  Dim cn As Object
  Dim rs As Object
  Dim vSQL As Variant
 
  'コネクションオブジェクト作成
  Set cn = CreateObject("ADODB.Connection")
  'レコードセットオブジェクト作成
  Set rs = CreateObject("ADODB.Recordset")

  '-------------------
  ' 対象Excelオープン
  '-------------------
  With cn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .Properties("Extended Properties") = "Excel 12.0;HDR=YES;IMEX=1"
    .Open ThisWorkbook.FullName
  End With

  '---------------------------
  ' SQL作成
  '---------------------------
  vSQL = "select "
  '抽出項目のセット
  vSQL = vSQL & "[CustomerList$].顧客No, [CustomerList$].顧客名, [CustomerList$].コキャクメイ, [CustomerList$].UpdateUserName "
  '抽出先テーブル名のセット
  vSQL = vSQL & "from [CustomerList$] "
  '抽出条件
  vSQL = vSQL & "where [CustomerList$].UpdateUserName = 'ひつじ'"
    
  
  '---------------------------
  ' SELECT結果->Sheet貼り付け
  '---------------------------
  'SQL実行
  Set rs = cn.Execute(vSQL)
  '指定シートに貼り付け
  Worksheets("検索シート").Range("A6").CopyFromRecordset rs


'******************************
'エラー処理(終了処理)
'******************************
Error_Handling:
  If Err.Number <> 0 Then
    MsgBox Err.Description
  End If
  '開放
  Set rs = Nothing
  Set cn = Nothing
  MsgBox "処理完了"
  
End Sub
・ツリー全体表示

【78163】Re:複数のブックをフォームのボタンで切...
回答  kuku008110  - 16/4/30(土) 15:55 -

引用なし
パスワード
   コメントありがとうございます、
こちらを終了にします。
・ツリー全体表示

【78162】Re:複数のブックをフォームのボタンで切...
発言  β  - 16/4/30(土) 14:12 -

引用なし
パスワード
   ▼kuku008110 さん:

はげしい(?)マルチポストですね。

ここ、質問箱や学校はマルチ許容していますが、その場合も、それぞれのルールがあります。
またサロンはマルチ禁止です。

学校のほうに、ちょこっとレスしておきました。
・ツリー全体表示

【78161】複数のブックをフォームのボタンで切り替...
質問  kuku008110  - 16/4/30(土) 11:54 -

引用なし
パスワード
   Excel2013で複数のブックを開いている時、フォームのボタンで表示するブックを切り替えたいのですが・・・。

Excel2013で複数のブック1~5を開いているときにVBA(ブック5.Activate)を使って、ブック5を前面に持ってきたいのですがうまく行きません。

詳細は、ブック1~5が既に開いている状態で、「ブック1の作業を終了しますか?」というフォームの「終了」ボタンを押すと新しいフォーム(ブック5で行う作業内容や手順の書かれたもの)を最前面に表示し、その背面にブック5を表示したいのですが、現状は、新しいフォームは最前面に表示されるのですが、ブック5は、ちゃんと新しいフォームの背面に表示されるときもあれば、ブック1~4のさらに背面に表示されたり、ブック1の背面に表示されたりとランダムな位置に表示されてしまいます。何か良い方法がございましたら教えて頂きますようお願い致します。
・ツリー全体表示

【78160】Re:メール送信
発言  γ  - 16/4/29(金) 8:34 -

引用なし
パスワード
   レスポンスする時間が取れずに失礼しました。

まず、エラー内容も示してもらうと
皆さんからの回答がつきやすいかもしれません。

私もトライしてみましたが、
当初はセキュリティ関連でエラーがでました。

ht tp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_080.html#SEND_AUTH
の「送信認証を行なうメールサーバでの対応」を使い、
送信が確認できました。
(Outlookでは迷惑メール扱いになってはいましたが)
参考にしてください。
# エラー内容が違うかも知れないのでそのまま適用できるかは不明。

一番確実なのは、日頃から使っているメールソフト(例えばOutlook)を
VBAから動かすことかもしれませんね。
・ツリー全体表示

【78159】Re:RC数式の一括入力が認識されません
お礼  けんじ  - 16/4/28(木) 9:14 -

引用なし
パスワード
   回答ありがとうございます。
おかげ様で成功しました。


>それはそれとして、F2 を押さないと認識しない件は、配列のデータ型をStringにしているからだと思います。
>Variant型にして実行してみてください。
これで数式として認識しました。
ありがとうございます。実行速度が0.2秒 × 50人 = 10秒程 短縮できました。
同じように他も部分も短縮できそうです。


ちなみに、
>セルに書きこんでいるところのコードも是非拝見したいと思っているんですが

『'次の代入は、以前はFuncstrを使わずに直接、かつ計算式毎に代入していた。
シート.Cells(入力開始行, 計算式1列).Resize(日数, 合計列 - 計算式1列).FormulaR1C1 = FuncStr』
の部分が書き込んでいるコードでした。


>ところで、セル領域への数式一括セットですが、ちょっと難しく考えすぎているかもしれませんね。
>いずれも、同じ結果(参照する行は異なりますが)になります。
>けんじさんのヒントになればと思います。
頂いたコードも確認しました。とても勉強になりました。
Variant型であれば、FormulaじゃなくてValueに入力しても数式として認識してくれるんですね。
質問した後、自分でも調べていたのですが、
string型であっても、配列でなければ数式として認識していたので、
配列での数式入力はできない仕様なのかと思い、諦めたところでした。

ありがとうございましたm(_ _)m
・ツリー全体表示

【78158】Re:RC数式の一括入力が認識されません
発言  β  - 16/4/28(木) 7:21 -

引用なし
パスワード
   ▼けんじ さん:

セルに書きこんでいるところのコードも是非拝見したいと思っているんですが
それはそれとして、F2 を押さないと認識しない件は、配列のデータ型をStringにしているからだと思います。
Variant型にして実行してみてください。

ところで、セル領域への数式一括セットですが、ちょっと難しく考えすぎているかもしれませんね。

新規ブックに、以下のコードを貼り付け
I1:K7に適当な文字列を入れたうえで、
A1 : =UDFTEST(I1) これを K1 までフィルコピー。
そのあと、Test2〜Test7 まで実行してください。
各行のA〜C列に数式を埋め込んでいます。
いずれも、同じ結果(参照する行は異なりますが)になります。
けんじさんのヒントになればと思います。


Function UDFTEST(R As Range) As String
  UDFTEST = "abc" & R.Value
End Function

Sub test2()
  Range("A2:C2").Formula = "=UDFTEST(I$2)"
End Sub

Sub test3()
  Range("A3:C3").FormulaR1C1 = "=UDFTEST(RC[8])"
End Sub

Sub Test4()
  Dim v(1 To 1, 1 To 3) As String
  
  v(1, 1) = "=UDFTEST(RC[8])"
  v(1, 2) = "=UDFTEST(RC[8])"
  v(1, 3) = "=UDFTEST(RC[8])"

  Range("A4:C4").Value = v
  
End Sub

Sub Test5()
  Dim v(1 To 1, 1 To 3) As String
  
  v(1, 1) = "=UDFTEST(RC[8])"
  v(1, 2) = "=UDFTEST(RC[8])"
  v(1, 3) = "=UDFTEST(RC[8])"

  Range("A5:C5").FormulaR1C1 = v
  
End Sub

Sub Test6()
  Dim v(1 To 1, 1 To 3) As Variant
  
  v(1, 1) = "=UDFTEST(RC[8])"
  v(1, 2) = "=UDFTEST(RC[8])"
  v(1, 3) = "=UDFTEST(RC[8])"

  Range("A6:C6").Value = v
  
End Sub

Sub Test7()
  Dim v(1 To 1, 1 To 3) As Variant
  
  v(1, 1) = "=UDFTEST(RC[8])"
  v(1, 2) = "=UDFTEST(RC[8])"
  v(1, 3) = "=UDFTEST(RC[8])"

  Range("A7:C7").FormulaR1C1 = v
  
End Sub
・ツリー全体表示

【78157】Re:RC数式の一括入力が認識されません
発言  β  - 16/4/28(木) 6:47 -

引用なし
パスワード
   ▼けんじ さん:

アップされたコード、実際に配列FuncStrからセル領域に書きこんでいるところのコードがありませんが
その、実際に書きこんでいるコードをコピペで、そのままアップされてはいかがでしょう。
・ツリー全体表示

【78156】Re:RC数式の一括入力が認識されません
発言  けんじ  - 16/4/28(木) 1:16 -

引用なし
パスワード
   元々は


シート.range(シート.cells(入力行,計算式1列), _
 シート.cells(入力行+ 日数,計算式1列).formula _
    = "=計算式1(RC[" & 対象列 - 計算式1列 & "])"


みたいなものがずらずら並んでいるだけでした。
・ツリー全体表示

【78155】RC数式の一括入力が認識されません
質問  けんじ  - 16/4/28(木) 0:59 -

引用なし
パスワード
   元々は計算式ごとにセルに入力していたけど、従業員全員に対して繰り返す処理をする際に時間がかかることから、一括して入力するように修正したら、数式として認識してくれなくなりました。
ただし、モジュール終了後に、
1.RC形式を使用するのチェックを付け
2.入力し直し(F2 & Enter)すると、認識します。


Function 計算式1(r as range) as string
計算式1 = "ホニャララ"
'計算式2と計算式3も同様
End Function

sub 問題となっている代入()
Const 計算式1str = "=計算式1(RC[" & 対象列 - 計算式1列 & "])"
Const 計算式2str = "=計算式2(RC[" & 対象列 - 計算式2列 & "])"
Const 計算式3str = "=計算式3(RC[" & 対象列 - 計算式3列 & "])"
Const 合計式str = "=sum(RC[-3]:RC[-1])"
'実際は、計算式はもっといっぱいある。


Dim FuncStr() As String: ReDim FuncStr(日数, 合計列 - 計算式1列 + 1)

For i = 1 To 日数
  FuncStr(i, 計算式1列 - 23) = 計算式1str
  FuncStr(i, 計算式2列 - 23) = 計算式2str
  FuncStr(i, 計算式3列 - 23) = 計算式3str
  FuncStr(i, 合計列 - 23) = 合計式str
Next
'次の代入は、以前はFuncstrを使わずに直接、かつ計算式毎に代入していた。
シート.Cells(入力開始行, 計算式1列).Resize(日数, 合計列 - 計算式1列).FormulaR1C1 = FuncStr

'次の式を入れるとそのセルのみ、ちゃんと数式として認識します。
シート.Cells(入力開始行, 計算式1列).Formula = シート.Cells(入力開始行, 計算式1列).Formula

end sub

何が問題なんだか分りません。
教えていただけると大変助かります。
・ツリー全体表示

【78154】Re:メール送信
質問  aaa  - 16/4/27(水) 10:51 -

引用なし
パスワード
   ▼γ さん:
>コードを提示してみてはいかがですか?
>
>CDOを使うと必ずそういう事象が発生するという話は聞いたことがありません。
>回避する方法と言われても、仮にコードに問題がある場合、
>どう問題があるのか誰にもわからないじゃないですか。
>無茶なことを言っちゃいけませんよ。

自作も含め
何個か試したのですが

Sub sample()
  Dim objCDO As New CDO.Message
  With objCDO
    With .Configuration.Fields '設定項目
       .Item(CdoConfiguration.cdoSMTPServer) = "***********" 'SMTPサーバ名
       .Item(CdoConfiguration.cdoSendUsingMethod) = CdoSendUsing.cdoSendUsingPort '外部SMTP指定
       .Item(CdoConfiguration.cdoSMTPServerPort) = 25 'ポートNo.
       .Item(CdoConfiguration.cdoSMTPConnectionTimeout) = 60 'タイムアウト
       .Item(CdoConfiguration.cdoLanguageCode) = CdoCharset.cdoShift_JIS '文字セット指定
       .Update '設定を更新
    End With
     .MDNRequested = True '開封確認
     .MimeFormatted = True 'MIMEを使って書式設定
     .From = "*************************"
     .To = "***********************"
     .CC = ""
     .BCC = ""
     .Subject = "メール送信"
     .TextBody = "本文テスト"
     .TextBody = Replace(.TextBody, vbLf, vbCrLf)
     .TextBody = Replace(.TextBody, vbCr, vbCrLf)

  End With
  
  objCDO.Send

  Set objCDO = Nothing

End Sub

CDO以外でも
良い案があれば
よろしくお願いします
・ツリー全体表示

【78153】Re:メール送信
発言  γ  - 16/4/27(水) 6:38 -

引用なし
パスワード
   コードを提示してみてはいかがですか?

CDOを使うと必ずそういう事象が発生するという話は聞いたことがありません。
回避する方法と言われても、仮にコードに問題がある場合、
どう問題があるのか誰にもわからないじゃないですか。
無茶なことを言っちゃいけませんよ。
・ツリー全体表示

【78152】メール送信
質問  aaa  - 16/4/26(火) 14:04 -

引用なし
パスワード
   一言ボタン一つで
メール送信を
したいのですが

CDO作成して送るのできるのですが
プログラムが終了せず固まってしまいます
.sendコマンドの後です

何か、回避方法か
別の方法あれば、
ご教授お願いしたいのですが
よろしく お願いします

Windows7 32bit と64bit
Excel2013
・ツリー全体表示

【78151】Re:Sheet1で登録したグループ化を全ての...
発言  γ  - 16/4/25(月) 21:38 -

引用なし
パスワード
   >"Sheet1で登録したグループ化を全てのシートに適用する"方法が
>あれば教えてください。

そのグループ化の目的はどんなことですか?
「小計」機能を使っているのですか?

どのシートも同じ箇所に、同じグループを設定するのですか?
ルールが明確であれば、それに従って、各シートの特定範囲をグループ化する
ことは可能でしょう。

また、以下のような策で回避することもできるでしょう。

例えばですが、
・グループ化されているシートのコピーを個数分とります。
・そこに今のシートの内容をコピーペイストします。
・元のシートを消します。
こんなことではどうでしょうか?
もちろん、上記の作業をマクロ化するのです。
・ツリー全体表示

【78150】Re:Sheet1で登録したグループ化を全ての...
発言  カリーニン  - 16/4/25(月) 20:22 -

引用なし
パスワード
   参考HPです。

ht tp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_030_200.html

よく調べたわけではないですが地道に結合セルを探すしかないようですね。

書式を一切合切コピーしていいなら適用元のシートの書式全体をコピし、
適用先のシート全部を選択した状態で貼り付け、とすれば簡単です。

結合範囲のみ他のシートに反映させたいなら先ほどの方法になると思います。

※グループ化=セル結合との前提での回答です。グループ化、というのが他
の意味でしたら「登録」の意味と合わせて補足願います。
・ツリー全体表示

214 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free