Excel VBA質問箱 IV

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

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


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

【76066】Re:条件付き書式について
お礼  ken  - 14/9/12(金) 14:19 -

引用なし
パスワード
   独覚 さん 早々の回答有難う御座います。

家のPCは2010で下記の記述で出来ました。
会社のPCは2010ですが保存形式は2003だと思います。
今日はお休みなので会社で試せませんが
やってみたいと思います。

有難う御座いました。

>>If Cells(i, 1).DisplayFormat.Font.Color = RGB(255, 0, 0) Then
>としてみてください。
・ツリー全体表示

【76065】Re:条件付き書式について
回答  独覚  - 14/9/12(金) 13:36 -

引用なし
パスワード
   ▼ken さん:
Excelのバージョンはなんでしょう?
2010からはRangeオブジェクトにDisplayFormatというプロパティが追加されていて
表示形式・条件付き書式を問わずに現在のセルの書式などを調べられます。
(ただし、ユーザー定義関数では使えませんが)

Excelが2010以降であれば
>If Cells(i, 1).Font.Color = RGB(255, 0, 0) Then

>If Cells(i, 1).DisplayFormat.Font.Color = RGB(255, 0, 0) Then
としてみてください。
・ツリー全体表示

【76064】条件付き書式について
質問  ken  - 14/9/12(金) 13:08 -

引用なし
パスワード
   いつもお世話になっています。
どうしても解らないので質問させて下さい。

セルに入力された数値を条件付き書式で色を赤に変更しています。
例えば=2>A1の場合FONT色を赤にする条件がA1〜A10に入っているとします。
条件付き書式により赤になっているセルが有ったら "規格外れです"のメッセージを出したいのです。
Sub test()
  Dim i As Integer
  For i = 1 To 10
    If Cells(i, 1).Font.Color = RGB(255, 0, 0) Then
      MsgBox "規格外れです"
      Exit For
    End If
  Next
End Sub
この場合直接FONT色を変更した場合はメッセージが出せますが条件付き書式だとダメみたいです。
条件付き書式の色を判断する事は可能でしょうか?
どなたかお教えください。
・ツリー全体表示

【76063】Re:CSVファイルの中身をエクセルに落とし...
発言  独覚  - 14/9/12(金) 10:10 -

引用なし
パスワード
   ▼彼方 さん:
念のため。
>With ActiveSheet.QueryTables.Add(Connection:="TEXT;"&csvname,Destination:=Cells(i,1))
を("TEXT;"の前の「_」は消し忘れとして)
>With WorkWs.QueryTables.Add(Connection:="TEXT;"&csvname,Destination:=WorkWs.Cells(i,1))
とシートを明記してはどうでしょうか?
ただ、これが標準モジュールに記載されているんだったら
WorkWs.Activate
があるので影響ないかなとも思えるけども。

これでだめなら、あとは省略されてる定義部分とCSVの内容を見比べていく、
ブレークポイントを設定して一行ずつ実行させていってみるとかかな?
・ツリー全体表示

【76062】CSVファイルの中身をエクセルに落とした...
質問  彼方  - 14/9/12(金) 1:48 -

引用なし
パスワード
   はじめまして。
よろしくおねがいします。

【こう動かしたい】
1.バッチファイルにて作成したActiveDirectoryのユーザ一覧をCSVに落としたファイルがあります。
2.VBA(エクセル)にて、項目名、標題等を設定しているので、その中にCSVの中身を落としたい(日本語が不自由ですみません)(例でいうと△の部分にCSVの中身を入れたいのです)
(例)
標題:×社 社員一覧
名前 性別 年齢
△△ △  △

【困っていること】
CSVにデータは入っているのですが、いざVBAを実行するとCSVデータを入れたい所はいつも空っぽになってしまいます。なぜ、エクセルにCSVの中身がコピーされていないのでしょうか?

【ソース】

Dim cmd1 as string
dim csvname as string
dim i as long

WorkWs.Activate

If WorkWs.Range("A2").Value=""then
i=2
Else
hlast=WorkWs.Range("A1").End(xlDown).Row
i=hlast+1
End if
csvname=設定Ws.Range("C20").Value & "\date.csv"

With ActiveSheet.QueryTables.Add(Connection:=_"TEXT;"&csvname,Destination:=Cells(i,1))

.FieldNames = True
…以下延々と定義が続く
End With

Kill csvname

End sub

↑の処理が怪しいかなと思ったのですが、このソースにおかしい所はあるでしょうか?
宜しくお願いします。
・ツリー全体表示

【76061】Re:値が不一致の場合のみ、特定の列の最...
お礼  ヤマダ  - 14/9/5(金) 15:40 -

引用なし
パスワード
   ▼kanabun さん:
>▼ヤマダ さん:
>
>>
>>数式ではなく、値を比べたいです。
>
>簡単な サンプルデータがあるとよく分かるのですが...
>
>あてずっぽで、
>
>見るのは T,U,V,Wの4列ですよね?
>最初に U列の最終セルをRange型の変数 LastU にセットします。
>このセルには U列の合計式が書いてあります。
>このセルと そのふたつ右のW列の同じ行のセルの「値」を較べます。
>同じなら OKで終了。
>同じでないとき、
> T列の値 - U列の値 という式を V列にセットしてやります。
>
>ここまでをコードにすると。。。
>
>Sub Check1()
>  Dim LastU As Range
>  Const msg = "U列合計とW列合計"
>  
>  '[U]列の最終セル(合計セル)
>  Set LastU = Cells(Rows.Count, "U").End(xlUp)
>  'U列とW列の合計が一致していたらメッセージを出して終了
>  If LastU.Value = LastU.Offset(, 2).Value Then
>    MsgBox msg & "は同じです OK"
>    Exit Sub 'OK 終了
>  End If
>  
> '合計が一致していなければ メッセージを出して
>  MsgBox msg & "が異なります"
>  'T列からU列を引いてV列に結果を表示させる
>  Range("V5", LastU.Offset(-1, 1)).Formula = "=T5-U5"
>End Sub

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

【76060】Re:値が不一致の場合のみ、特定の列の最...
発言  kanabun  - 14/9/4(木) 19:50 -

引用なし
パスワード
   ▼ヤマダ さん:

>
>数式ではなく、値を比べたいです。

簡単な サンプルデータがあるとよく分かるのですが...

あてずっぽで、

見るのは T,U,V,Wの4列ですよね?
最初に U列の最終セルをRange型の変数 LastU にセットします。
このセルには U列の合計式が書いてあります。
このセルと そのふたつ右のW列の同じ行のセルの「値」を較べます。
同じなら OKで終了。
同じでないとき、
 T列の値 - U列の値 という式を V列にセットしてやります。

ここまでをコードにすると。。。

Sub Check1()
  Dim LastU As Range
  Const msg = "U列合計とW列合計"
  
  '[U]列の最終セル(合計セル)
  Set LastU = Cells(Rows.Count, "U").End(xlUp)
  'U列とW列の合計が一致していたらメッセージを出して終了
  If LastU.Value = LastU.Offset(, 2).Value Then
    MsgBox msg & "は同じです OK"
    Exit Sub 'OK 終了
  End If
  
 '合計が一致していなければ メッセージを出して
  MsgBox msg & "が異なります"
  'T列からU列を引いてV列に結果を表示させる
  Range("V5", LastU.Offset(-1, 1)).Formula = "=T5-U5"
End Sub
・ツリー全体表示

【76059】Re:値が不一致の場合のみ、特定の列の最...
発言  ヤマダ  - 14/9/4(木) 19:29 -

引用なし
パスワード
   ▼kanabun さん:
>▼ヤマダ さん:
>
>>V列の値が、全て削除されてしまいます
>
>> If Range("W" & rNum1 + 1).Formula = Range("U" & rNum + 1).Formula Then
>
>とりあえず...
>W列の「数式」と U列の「数式」を較べてるから、一致しないのでは?
>結果の「値」を較べて判断したいのではありませんか?
 
Kanabun様

数式ではなく、値を比べたいです。
・ツリー全体表示

【76058】Re:値が不一致の場合のみ、特定の列の最...
発言  kanabun  - 14/9/4(木) 19:18 -

引用なし
パスワード
   ▼ヤマダ さん:

>V列の値が、全て削除されてしまいます

> If Range("W" & rNum1 + 1).Formula = Range("U" & rNum + 1).Formula Then

とりあえず...
W列の「数式」と U列の「数式」を較べてるから、一致しないのでは?
結果の「値」を較べて判断したいのではありませんか?
・ツリー全体表示

【76057】値が不一致の場合のみ、特定の列の最下行...
質問  ヤマダ  - 14/9/4(木) 18:53 -

引用なし
パスワード
   Excel2010を使っております
If Range("W" & rNum1 + 1).Formula = Range("U" & rNum + 1).Formula Then
MsgBox "一致"
Else
MsgBox "不一致"
For i = 5 To Cells(Rows.Count, 21).End(xlUp).Row
Range("V" & i).Formula = "=T" & i & "-" & "U" & i

Next

Dim LastRow As Long
LastRow = Cells(Rows.Count, 22).End(xlUp).Row
Cells(LastRow, 22).ClearContents
End If


U列とW列の合計が一致していたらメッセージを出して終了

U列とW列の合計が一致していなければメッセージを出す+
T列からU列を引いてV列に結果を表示させる

表示させるまでは出来まして、V列の最下行の値を削除いたしたく思います。
その為に下記コードを使っていますが、

Dim LastRow As Long
LastRow = Cells(Rows.Count, 22).End(xlUp).Row
Cells(LastRow, 22).ClearContents
End If


V列の値が、全て削除されてしまいます

一致していなかった場合だけ、V列の最下行の値を削除する為には
どうすれば良いでしょうか?
ご教授下さい   
・ツリー全体表示

【76056】Re:VBAソースへのジャンプについて
お礼  happygolucky1124  - 14/9/4(木) 13:10 -

引用なし
パスワード
   ▼独覚 さん:
早速の回答ありがとうございます。

>Application.Goto "Sheet7.CommandButton7_Click"
で無事実現できました。
アドバイスありがとうございました。
・ツリー全体表示

【76055】Re:VBAソースへのジャンプについて
発言  独覚  - 14/9/4(木) 11:30 -

引用なし
パスワード
   ▼happygolucky1124 さん:
モジュールは以下の場合、Sheet1、Sheet2…になります。
これはシートモジュールと言います。
構造としては上から
プロジェクト
モジュール
プロシージャ
の順になります。

>VBAProject(****.xls)
>|-Microsoft Excel Objects
> |-Sheet1(****)
> |-Sheet2(****)
> |-Sheet3(****)
> |-Sheet4(****)
> |-Sheet5(****)
> |-Sheet6(****)
> |-Sheet7(****)

なので

>VBEを開き、Sheet7のCommandButton7_Clickを表示する

Application.Goto "Sheet7.CommandButton7_Click"
としてみてください。
・ツリー全体表示

【76054】Re:VBAソースへのジャンプについて
質問  happygolucky1124  - 14/9/4(木) 11:21 -

引用なし
パスワード
   ▼独覚 さん:
回答ありがとうございます。
が、まだ実現できていません。

VBAProject(****.xls)
|-Microsoft Excel Objects
 |-Sheet1(****)
 |-Sheet2(****)
 |-Sheet3(****)
 |-Sheet4(****)
 |-Sheet5(****)
 |-Sheet6(****)
 |-Sheet7(****)

という環境の下で(これだと同一モジュール内ですよね)
Sheet1がまとめシートとして、
1.Sheet1のCommandButton1をクリックすると
2.VBEを開き、Sheet7のCommandButton7_Clickを表示する
を実現するにはSheet1のCommandButton1_Clickに
どう記述したらいいのでしょうか?

Application.Goto "CommandButton7_Click"
でもNGですし
Application.Goto Worksheets("Sheet7").CommandButton7_Click
でも文法的にNGですし。。。

申し訳ないのですが、もう一段深く教えていただけるとありがたいです。
・ツリー全体表示

【76053】Re:VBAソースへのジャンプについて
回答  独覚  - 14/9/4(木) 9:42 -

引用なし
パスワード
   ▼happygolucky1124 さん:
2010で簡単なテストしかしていませんが。

同じモジュール内であれば
Application.Goto "プロシージャ名"
で、違うモジュールの場合は
Application.Goto "モジュール名.プロシージャ名"
でVBエディタが開かれ、指定したプロシージャの場所にカーソルが移動します。

ここで同じモジュール、違うモジュールとは「Application.Goto」が書かれている
モジュールと同じかどうかになります。
なお、同じモジュール内で、モジュール名を指定しても問題ありません。
・ツリー全体表示

【76052】Re:VBAソースへのジャンプについて
発言  happygolucky1124  - 14/9/3(水) 20:38 -

引用なし
パスワード
   >ハイパーリンクのようにセル***に書かれた文字をクリックしたら
>VBEが立ち上がり、シート***のPrivate Sub CommandButton**_Click()が
>表示されるイメージです。

と書きましたが、VBAのコマンドボタンを押してでもいいですし
方法は問いません。

お聞きしたかったのはVBAのソースに直接飛ぶことが出来るか?
出来るのなら方法は。。。?です。
・ツリー全体表示

【76051】VBAソースへのジャンプについて
質問  happygolucky1124  - 14/9/3(水) 20:06 -

引用なし
パスワード
   EXCEL2012&windows7を使用しております。

ひとつのエクセルファイルに複数のシート/複数のVBAマクロが
あるのですが、このファイルにどんなマクロがどこにあるのかの
まとめ(目次みたいなもの)のシートを作ろうとしています。

そこで、まとめシートから1クリックで、
・VBAマクロの置いてあるシートへのジャンプ
・VBAマクロの概要/説明/使用方法が書いた場所へのジャンプ
・VBAマクロのコードへのジャンプ
ができるようにしたいと考えています。

・VBAマクロの置いてあるシートへのジャンプ
・VBAマクロの概要/説明/使用方法が書いた場所へのジャンプ
はハイパーリンクで実現可能なのですが、
・VBAマクロのコードへのジャンプ
の実現方法がわかりません。

エクセル自体の機能でもVBAマクロを新たに書くのでも良いのですが
そもそも実現可能でしょうか?
可能であれば実現方法を教えて頂けないでしょうか。

ハイパーリンクのようにセル***に書かれた文字をクリックしたら
VBEが立ち上がり、シート***のPrivate Sub CommandButton**_Click()が
表示されるイメージです。
・ツリー全体表示

【76050】Re:VBA 検索に該当すれば指定列に値を入...
お礼  みみ  - 14/9/3(水) 18:18 -

引用なし
パスワード
   ▼独覚 さん:
できました!!!感動です;;
ありがとうございます。

こんな複雑なの、まだまだ自分では出来る気がしませんが、
便利さを実感しました。

少しずつ勉強したいと思います。
・ツリー全体表示

【76049】Re:VBA 検索に該当すれば指定列に値を入...
発言  独覚  - 14/9/3(水) 16:36 -

引用なし
パスワード
   ごめんなさい、一か所修正です。
(結果に違いはないといえばないのですが…)

Sub TST()
  Dim 在庫_Sheet   As Worksheet
  Dim 入力_Sheet   As Worksheet
  Dim CHK_ROW_CNT   As Long
  Dim LOOP_CNT    As Long
  Dim OUT_ROW_CNT   As Long

  Set 在庫_Sheet = Worksheets("在庫")
  Set 入力_Sheet = Worksheets("入力")

  CHK_ROW_CNT = 入力_Sheet.Cells(Rows.Count, "D").End(xlUp).Row
  For LOOP_CNT = 2 To CHK_ROW_CNT
    If 入力_Sheet.Cells(LOOP_CNT, "D") <> "" Then
      OUT_ROW_CNT = 0
      On Error Resume Next
      OUT_ROW_CNT = WorksheetFunction.Match(入力_Sheet.Cells(LOOP_CNT, "D"), 在庫_Sheet.Range("J:J"), 0)
      On Error GoTo 0
      If OUT_ROW_CNT > 0 Then
        在庫_Sheet.Cells(OUT_ROW_CNT, "P").Value = "済"
      End If
    End If
  Next
End Sub

OUT_ROW_CNT = 0
の位置を変更してください。
・ツリー全体表示

【76048】Re:VBA 検索に該当すれば指定列に値を入...
回答  独覚  - 14/9/3(水) 16:21 -

引用なし
パスワード
   ▼みみ さん:
データを入力するシートが「入力」だとします。
標準モジュールに以下を記載してマクロボタンに登録してみてください。

Sub TST()
  Dim 在庫_Sheet   As Worksheet
  Dim 入力_Sheet   As Worksheet
  Dim CHK_ROW_CNT   As Long
  Dim LOOP_CNT    As Long
  Dim OUT_ROW_CNT   As Long

  Set 在庫_Sheet = Worksheets("在庫")
  Set 入力_Sheet = Worksheets("入力")

  CHK_ROW_CNT = 入力_Sheet.Cells(Rows.Count, "D").End(xlUp).Row
  OUT_ROW_CNT = 0
  For LOOP_CNT = 2 To CHK_ROW_CNT
    If 入力_Sheet.Cells(LOOP_CNT, "D") <> "" Then
      On Error Resume Next
      OUT_ROW_CNT = WorksheetFunction.Match(入力_Sheet.Cells(LOOP_CNT, "D"), 在庫_Sheet.Range("J:J"), 0)
      On Error GoTo 0
      If OUT_ROW_CNT > 0 Then
        在庫_Sheet.Cells(OUT_ROW_CNT, "P").Value = "済"
      End If
    End If
  Next
End Sub
・ツリー全体表示

【76047】Re:VBA 検索に該当すれば指定列に値を入...
発言  みみ  - 14/9/3(水) 15:52 -

引用なし
パスワード
   ▼独覚 さん:
お返事ありがとうございます。

「済」の入力が必要ないときもありますので、
マクロボタンで実行できればベストなんですが。。。

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

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