Excel VBA質問箱 IV

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

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


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

【79263】Re:チェックボックスがONの場合に選択し...
質問  ペーターパン  - 17/6/23(金) 17:59 -

引用なし
パスワード
   もし、下記のコードをアドインにしようとした場合、どうすればよいでしょうか?
過去の質問に再質問で申し訳ありませんが、何卒宜しくお願い致します。

>▼β さん:
>ありがとうございます。
>
>モジュールレベルで変数を宣言する。
>if not構文で宣言する。
>どちらも今の私ではたどり着けない答えでした。
>
>Worksheet_SelectionChangeの場合、イベント発生の度に変数がどうなっているかよく考えなくてはいけないのですね。
>自分が試しに作ったものだと太字が延々と作られ続けた理由がよくわかりました。
>
>壁にぶつかってまた1つ成長できました。
>これからも精進します。
>
>>▼ペーターパン さん:
>>
>>元々アップしたコードの Cellsを必要行のみにするとどうでしょうか?
>>
>>
>>Option Explicit
>>
>>Dim bLine As Range
>>
>>Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>>  If Not bLine Is Nothing Then
>>    bLine.Font.Bold = False
>>    Set bLine = Nothing
>>  End If
>>  If CheckBoxes("ChkBx1").Value = xlOn Then
>>    Selection.EntireRow.Font.Bold = True
>>    Set bLine = Selection.EntireRow
>>  End If
>>End Sub
・ツリー全体表示

【79262】Re:隣のセルが空白でない場合に値を入力...
発言  VBA勉強始めました  - 17/6/23(金) 16:25 -

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

返信が遅くなり申し訳ありません。
投稿した翌日から風邪で寝込んでおりました…。

B列の途中には空白はありません。

宜しくお願い致します。

>▼VBA勉強始めました さん:
>
>>この挿入したA列にB列が空白ではない場合
>>数値を入力したいと考えているのですが
>
>B列の途中の行に空白はあるのでしょうか。
>それとも、データはすべて埋まっているのでしょうか。
・ツリー全体表示

【79261】Re:オートシェイプ
発言  AS  - 17/6/23(金) 7:25 -

引用なし
パスワード
   マナ様
返信ありがとうございます。

コードは以下です。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address <> "$A$1" Then Exit Sub

If Target.Value = "普通" Then
  On Error GoTo SHAPEMAKE
  ActiveSheet.Shapes("普通").Visible = True
Else
  ActiveSheet.Shapes("普通").Visible = False
End If
Exit Sub

SHAPEMAKE:
With ActiveSheet.Range("B1")
  ActiveSheet.Shapes.AddShape(Type:=msoShapeHeart, _
   Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Name = "普通"
End With
End Sub


宜しくお願い致します。
・ツリー全体表示

【79260】Re:オートシェイプ
発言  マナ  - 17/6/21(水) 19:10 -

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

>サンプルは、下記です。
>
>fast-uploader.com/file/7053571193354/
>

ダウンロードするのはためらいます。
できれば、文章で説明できませんか。
現在のコードもここに貼り付けてください。
・ツリー全体表示

【79259】Re:隣のセルが空白でない場合に値を入力...
発言  マナ  - 17/6/21(水) 18:49 -

引用なし
パスワード
   ▼VBA勉強始めました さん:

>この挿入したA列にB列が空白ではない場合
>数値を入力したいと考えているのですが

B列の途中の行に空白はあるのでしょうか。
それとも、データはすべて埋まっているのでしょうか。
・ツリー全体表示

【79258】隣のセルが空白でない場合に値を入力した...
質問  VBA勉強始めました  - 17/6/21(水) 13:28 -

引用なし
パスワード
   始めましてVBAを勉強し始めた者です。

毎月、従業員名簿を作成しているのですが
ほぼ同じ作業を手作業で行っており、非効率な為
VBAを使って作業を簡略化できればと考えております。

途中までの過程は独学ながらなんとか作成できているのですが
下記の作業だけどうすればよいかわからず固まっております…

【作業内容】
名簿を作成する為のファイルには5つのシートがあり
列の構成はすべて同じで、行は所属従業員によってシートごとでバラバラです。

   A   B   C   D  E  F
1 コード 部門名 No. 氏名
2  0000   A   10  a
3  0001   B   11  b
4  0002   C   12  c
5  0003   D   13  d
6

ここに下記のVBAでA列の左横に1列挿入します。
Sheets(1).Select
Columns("A:A").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

   A    B    C   D   E  F
1     コード 部門名 No. 氏名
2      0000   A   10  a
3      0001   B   11  b
4      0002   C   12  c
5      0003   D   13  d
6

この挿入したA列にB列が空白ではない場合
数値を入力したいと考えているのですが
VBAのテキストも買って読んでいるのですが
うまくVBAを組めません…

どなたかお力添えを頂けないでしょうか?
・ツリー全体表示

【79257】オートシェイプ
質問  AS  - 17/6/21(水) 12:28 -

引用なし
パスワード
   はじめまして
オートシェイプのオンオフで質問させて頂きます。

A1セルに普通、異常のデータリストがあります
普通を選択するとB10セルにオートシェイプで丸をするようにしました。

異常の場合でもオートシェイプで丸をつけたいのですが
どのように記述すれば良いのでしょうか?
また、選択セルを別シートにしたいのですが
その場合も合わせて教えてくださいませ。

サンプルは、下記です。

fast-uploader.com/file/7053571193354/

パスワードは、ASASASです。

宜しくお願い致します。
・ツリー全体表示

【79256】Re:数字になっていないセルの内容を自動...
発言  マナ  - 17/6/20(火) 18:58 -

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

こんな風に考えてはどうでしょうか

1)right関数で、右端の文字を調べ
2)"-" ならば、replace関数で、削除
3)その結果に、-1を掛ける
4)これを、繰り返す
・ツリー全体表示

【79255】数字になっていないセルの内容を自動変更
質問  watup  - 17/6/20(火) 14:36 -

引用なし
パスワード
   こんにちは。
一点質問させていただきます。

ある行に数字の羅列があるものの、そのなかに「15-」のように、
マイナス記号が数字の後ろにきたものがあります。

これを「-15」のように全て置き換えたいのですが、どのようにすれば
一番よいでしょうか。
・ツリー全体表示

【79254】Re:複数のファイルに存在する表を抜き出...
発言  inoue  - 17/6/19(月) 21:14 -

引用なし
パスワード
   ▼マナ さん:
>▼inoue さん:
>
>>おっしゃる通りにしましたら望みのことができました。
>>下記に成功したコードを記載させていただきます。
>
>一つの表に集約したいのではありませんか?
>期待通りの結果になっていないと思いますよ。


マナさん

確かに、最終形は一つの表にまとめたかったのですが、
手動で開いて表を一つずつ貼り付けることが
最大のハードルでしたので目的を達した感が強く思わず
解決だと思ってしまいました。

現状、一つのシートに表がいくつもある状態です。
(縦方向は等間隔ではありません。)
特定の文字(数字)が含まれていない行を削除できれば
いいかと思い、下記のようなコードを質問サイトから
拾ってきましたが、こちらで望みのことができそうでしょうか。

retu = "D"
word = InputBox(retu & "列に指定した文字が含まれていない行を削除します。" _
& vbCrLf & "検索する文字を入力してください。")
For i = Range("D" & "65536").End(xlUp).Row To 2 Step -1
If InStr(1, Range(retu & i).Value, word) = 0 Then
Rows(i).Delete
End If
Next i

本日、このコードを試せる環境になく、
また明日結果を報告させていただきます。
・ツリー全体表示

【79253】Re:OLEObject
発言  kuma  - 17/6/19(月) 16:29 -

引用なし
パスワード
   ▼kuma さん:
>▼マナ さん:
>>▼kuma さん:
>>
>>> "CMB" & i
>>
>>CMB列が存在するので、別の名前にできませんか。
>実際はCMBKB10,CMBKB11...ですが
>命名に問題ありますか?
>
>オブジェクト名でのループ参照ができれば問題ないのです。
>以上

自己レスです。
OLEObject→OLEObjects(構文記述ミス)で正常動作しました
解決とします。
・ツリー全体表示

【79252】Re:OLEObject
質問  kuma  - 17/6/19(月) 11:58 -

引用なし
パスワード
   ▼マナ さん:
>▼kuma さん:
>
>> "CMB" & i
>
>CMB列が存在するので、別の名前にできませんか。
実際はCMBKB10,CMBKB11...ですが
命名に問題ありますか?

オブジェクト名でのループ参照ができれば問題ないのです。
以上
・ツリー全体表示

【79251】Re:コマンドボタンのプロシージャを見や...
お礼  かな  - 17/6/19(月) 11:37 -

引用なし
パスワード
   自己解決しました。
callを使ってそれぞれのプロシを呼び出す形にしたら上手くいきました。
回答ありがとうございました。
・ツリー全体表示

【79250】Re:コマンドボタンのプロシージャを見や...
質問  miro  - 17/6/18(日) 23:25 -

引用なし
パスワード
   ▼マナ さん:
回答ありがとうございます。
そうですね、その様な感じに分けたいです。
もし、このコマンドボタンの処理をプロシージャ3つに分けるとしたら、どのように記述すればいいのでしょうか?

理想は
CommandButton1.1_Click()
基点取得
End sub

CommandButton1.2_Click()
数式挿入
End sub

CommandButton1.3_Click()
書式設定
End sub

こんな感じに分割して、VBE上でボーダーラインを引きたいのですが、これですと
一つのプロシしか実行できないので、これをボタンを押したら、上から順に実行される様にしたいんですが、何か適当な記述等あれば教えていただきたいです。
・ツリー全体表示

【79249】Re:複数のファイルに存在する表を抜き出...
発言  マナ  - 17/6/18(日) 23:22 -

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

>おっしゃる通りにしましたら望みのことができました。
>下記に成功したコードを記載させていただきます。

一つの表に集約したいのではありませんか?
期待通りの結果になっていないと思いますよ。
・ツリー全体表示

【79248】Re:複数のファイルに存在する表を抜き出...
お礼  inoue  - 17/6/18(日) 22:46 -

引用なし
パスワード
   ▼マナ さん:
>▼inoue さん:
>
>>しかし、取得できた領域はその1ファイルのみでした。
>>これを任意のフォルダ内にあるすべてのファイルに対して行うためには
>>どのようにすればよいでしょうか。
>
>現在のコードで、値を転記している箇所、
>
>>rIdx = rIdx + 1
>>
>>Cells(rIdx, 1).Value = fName
>>Me.Cells(rIdx, 2).Value = ActiveSheet.Range("A1").Value
>>Me.Cells(rIdx, 3).Value = ActiveSheet.Range("B1").Value
>>Me.Cells(rIdx, 4).Value = ActiveSheet.Range("C1").Value
>>Me.Cells(rIdx, 5).Value = ActiveSheet.Range("D1").Value
>>Me.Cells(rIdx, 6).Value = ActiveSheet.Range("E1").Value
>>Me.Cells(rIdx, 7).Value = ActiveSheet.Range("F1").Value
>
>ここに、組み込むのです。
>考えてみてください。
>転記先のセルは、End(xlup).Offset(1)で求めると良いと思います。

マナさん

度重なるご指導ありがとうございます!!
おっしゃる通りにしましたら望みのことができました。
日曜日にこのような無知なものにお付き合いいただき
誠にありがとうございました。
これを機にvbaのコードにも理解を深めていきたく思います。

下記に成功したコードを記載させていただきます。

Sub test()

Application.ScreenUpdating = False

Const myPath As String = "C:Users\ユーザ名\Desktop\フォルダ名\"
Dim fName As Strimg
fName = Dir (myPath & "*.xls")
Do Until fName = ""
Workbooks.Open Filename:=myPath & fName

Dim ws As Worksheet
Dim r As Range
Dim myStr As String
  
myStr = "目印"
  
Set ws = ActiveSheet
Set r = ws.Cells.Find(What:=myStr, LookIn:=xlValues, LookAt:=xlWhole)
  
Set r = r.CurrentRegion
Set r = Intersect(r, r.Offset(2))

r.Copy
  
Worksheets.Add
Range("A65536").End(xlUp).Offset(1).PasteSpecial xlPasteValues

Windows(fName).Close
fName = Dir
Loop

Applicaion.ScreenUpdating = True

End Sub
・ツリー全体表示

【79247】Re:複数のファイルに存在する表を抜き出...
発言  マナ  - 17/6/18(日) 21:17 -

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

>しかし、取得できた領域はその1ファイルのみでした。
>これを任意のフォルダ内にあるすべてのファイルに対して行うためには
>どのようにすればよいでしょうか。

現在のコードで、値を転記している箇所、

>rIdx = rIdx + 1
>
>Cells(rIdx, 1).Value = fName
>Me.Cells(rIdx, 2).Value = ActiveSheet.Range("A1").Value
>Me.Cells(rIdx, 3).Value = ActiveSheet.Range("B1").Value
>Me.Cells(rIdx, 4).Value = ActiveSheet.Range("C1").Value
>Me.Cells(rIdx, 5).Value = ActiveSheet.Range("D1").Value
>Me.Cells(rIdx, 6).Value = ActiveSheet.Range("E1").Value
>Me.Cells(rIdx, 7).Value = ActiveSheet.Range("F1").Value

ここに、組み込むのです。
考えてみてください。
転記先のセルは、End(xlup).Offset(1)で求めると良いと思います。
・ツリー全体表示

【79246】Re:コマンドボタンのプロシージャを見や...
発言  マナ  - 17/6/18(日) 21:08 -

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

分割するならこんな感じでしょうか。

Private Sub CommandButton1_Click()
  基点取得
  数式挿入
  書式設定
End Sub
・ツリー全体表示

【79245】Re:コマンドボタンのプロシージャを見や...
質問  miro  - 17/6/18(日) 20:33 -

引用なし
パスワード
   修正中なので質問以外の回答は無しでお願いします。
単純に
このプロシをいつかのプロシージャに分ける方法が知りたいのです。
・ツリー全体表示

【79244】Re:複数のファイルに存在する表を抜き出...
回答  inoue  - 17/6/18(日) 20:30 -

引用なし
パスワード
   ▼マナ さん:
>▼inoue さん:
>
>CurrentRegionが使えるならば
>データ範囲をこんな感じでコピーできるかもしれません。
>
>Sub test()
>  Dim ws As Worksheet
>  Dim r As Range
>  Dim myStr As String
>  
>  myStr = "目印"
>  
>  Set ws = ActiveSheet
>  Set r = ws.Cells.Find(What:=myStr, LookIn:=xlValues, LookAt:=xlWhole)
>  
>  Set r = r.CurrentRegion
>  Set r = Intersect(r, r.Offset(2))
>
>  r.Copy
>  
>  Worksheets.Add
>  Range("A3").PasteSpecial xlPasteValues
>  
>End Sub

マナさん

コードを記載いただきありがとうございます。

早速試してみたところ、最後に開いていた?と思われるファイルの
取得したい領域が取得できました!

しかし、取得できた領域はその1ファイルのみでした。
これを任意のフォルダ内にあるすべてのファイルに対して行うためには
どのようにすればよいでしょうか。

また、何度か試しておりましたところ、
「オブジェクト変数またはwithブロック変数が設定されていません。」
というエラーが出てきました。

たびたび申し訳ありませんが、引き続きご助言いただけますと幸いです。
・ツリー全体表示

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