Excel VBA質問箱 IV

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

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


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

【81277】移動
質問  あつし E-MAIL  - 20/5/5(火) 12:09 -

引用なし
パスワード
   VBA付きののExcelを新しいパソコンに移すとユーザーフォーラムとプログラムが消えてしまう。
・ツリー全体表示

【81276】Re:(ROW関数なのかな)詳しい方
発言  マナ  - 20/5/1(金) 17:43 -

引用なし
パスワード
   ht tp://www.excel.studio-kazu.jp/kw/20200428142532.html
・ツリー全体表示

【81275】(ROW関数なのかな)詳しい方
質問    - 20/5/1(金) 9:08 -

引用なし
パスワード
   サイトにテンプレートを登録するのですが、エクセルのシートを一枚のみ登録することができ、
印刷をする際、2枚目以降は自動的に一枚目のコピーが印刷されてしまうのですが

例えば (1枚目)
そのシートのA5を=他シート!A5 にしたとき、
そのシートのN5を=他シート!A6
そのシートのA17を=他シート!A7
そのシートのN17を=他シート!A8
そのシートのA29を=他シート!A9
そのシートのN29を=他シート!A10   。。。繰り返し

ここまではできるのですが、それが自動更新になってしまうので2.3...枚目も繰り返しこの数式になってしまいます。手入力でやれる理想の状態はこうです。

(2枚目)
そのシートのA5を=(ほかのシート)!A11 にしたとき、
そのシートのN5を=(ほかのシート)!A12
そのシートのA17を=(ほかのシート)!A13
そのシートのN17を=(ほかのシート)!A14
そのシートのA29を=(ほかのシート)!A15
そのシートのN29を=(ほかのシート)!A16

と、いう形です。手入力ならできますが、オートフィルもできない形なので難しいです

↑のような形になるよう、どうにかならないものなのでしょうか。
また、ご返答いただけましたら幸いです。
・ツリー全体表示

【81274】Re:形を変えて表を転記したい
発言  よっちゃん  - 20/4/30(木) 0:58 -

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

ありがとうございました。

参考にさせていただき、実際に動かしてみます。
初めて使う構文もあるので、調べながら使ってみますが、
わからなかったら質問させていただいてもいいですか?

他に、こんな方法もあるよ!という方も、アドバイスいただけたらと思います。
・ツリー全体表示

【81273】Re:CSVのヘッダーだけExcelで表示させる...
お礼  VBA初心者です  - 20/4/29(水) 23:00 -

引用なし
パスワード
   ありがとうございます!!!出来ました!!
今回とにかく一行目だけそのまま取り込めれば良かったのでなんとか出来ました!
サンプル等を調べてもなかなか合うものがなかったので助かりました。
ありがとうございます。
ちょっとずつ出来る事が増えていって思い通りにいろいろ作れるように勉強していきたいと思います。
ありがとうございました。
・ツリー全体表示

【81272】Re:CSVのヘッダーだけExcelで表示させる...
発言  VBA初心者です  - 20/4/29(水) 11:34 -

引用なし
パスワード
   あ!すいません。無知なものであれで完結なのかと思っていました。
サンプルを見ながらコードを打ったのではなくて、Excelごとダウンロードしたので構造がわかってなかったのですが、別のモジュールにとんでもなく長いコードが入っていました。
今回ダウンロードしたものは全部を表示させるものなので「ふまえて」ではなくて1から作ったほうが良いのかもしれません。

ReadCSV の記載があるのは・・・

Public Function ReadCSV(ByRef filepath As String, _
  Optional ByRef OutputWorksheet As Worksheet, _
  Optional ByRef TextColumns As String = "", _
  Optional ByRef SkipColumns As String = "", _
  Optional ByRef ColumnNumberFormats As Object = Nothing, _
  Optional ByRef ReadHeader As Boolean = True, _
  Optional ByVal OutputRow As Long = 1, _
  Optional ByVal OutputColumn As Long = 1, _
  Optional ByRef Delimiter As String = ",", _
  Optional ByRef Charset As String = mc_AutoDetectString, _
  Optional ByRef Quote As String = """", _
  Optional ByRef LineEndingCode As String = mc_AutoDetectString, _
  Optional ByRef AutoFit As Boolean = True) As Worksheet

 Dim CSV As Variant
 CSV = ReadCSVToArray2D(filepath, SkipColumns, ReadHeader, Delimiter, Charset, Quote, LineEndingCode)
 
 If OutputWorksheet Is Nothing Then
  Set OutputWorksheet = Worksheets.Add
 End If
 
 Call Array2DToWorksheetWithColumnFormat(OutputWorksheet, CSV, TextColumns, SkipColumns, ColumnNumberFormats, OutputRow, OutputColumn, AutoFit)
 
 Set ReadCSV = OutputWorksheet
End Function

上記になっておりますが、これ以外にも沢山記述がありました・・・

上記がわからない中、先程お教えいただいたコードがどういった意味を持つものか調べてみます・・・

お手数をおかけしてしまいすいません・・・
・ツリー全体表示

【81271】Re:CSVのヘッダーだけExcelで表示させる...
発言  マナ  - 20/4/29(水) 10:57 -

引用なし
パスワード
   ▼VBA初心者です さん:


>そのコードをふまえて、

そのコード(ReadCSV)がわからないと…
という意味です。

こんな感じでどうなりますか

Dim buf As String, s

Open filepath For Input As #1
Line Input #1, buf
Close #1

s = Split(buf, ",")
Worksheets("シート2").Cells(1).Resize(, UBound(s) + 1).Value = s
・ツリー全体表示

【81270】Re:CSVのヘッダーだけExcelで表示させる...
発言  VBA初心者です  - 20/4/29(水) 10:22 -

引用なし
パスワード
   扱うCSVが複数(7種類くらい)ありまして、項目(列)が数十件、レコード(行)が数千〜数万件のものです。
ヘッダーに項目目が入っているのですが似たような項目が順番が違っていたりするので、開いてみてもパッと見では何のファイルかわからないんです。

なので、今はCSVをテキストで開いて1行目だけコピーして、用意しておいたヘッダーと照合をかけているのですが、行が多いと開くだけでも時間がかかるので、これをなんとかもう少し簡単にならないかと思いまして質問させていただきました。
・ツリー全体表示

【81269】Re:CSVのヘッダーだけExcelで表示させる...
発言  マナ  - 20/4/29(水) 8:19 -

引用なし
パスワード
   ▼VBA初心者です さん:

ReadCSVが、どんなものか不明です?
・ツリー全体表示

【81268】Re:形を変えて表を転機したい
発言  マナ  - 20/4/29(水) 8:10 -

引用なし
パスワード
   ▼よっちゃん さん:

>多くても、一つの項目で10行くらいに収まるようにはしていますが、

Option Explicit

Sub test()
  Dim 表 As Range, 転記先 As Range
  Dim 期間 As String
  Dim s
  Dim 列 As Range
  Dim r As Range, c As Range
  Dim 項目 As String, 内容 As String
  Dim n As Long
  Dim 開始月 As Date, 終了月 As Date
  Dim d As Date
  
  Set 表 = Sheets("Sheet1").Range("B22:F22").Offset(1).Resize(100)
  Set 転記先 = Sheets("Sheet2").Range("A2")
  期間 = "20/4月〜21/1月"
  
  s = Split(Replace(期間, "月", ""), "〜")
  開始月 = DateValue("20" & s(0) & "/1")
  終了月 = DateValue("20" & s(1) & "/1")
  
  For Each 列 In 表.Columns
    Set r = Nothing
    On Error Resume Next
    Set r = 列.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0
    If Not r Is Nothing Then
      項目 = 列.Cells(0).Value
      For Each c In r
        内容 = c.Value
        d = 開始月
        Do
          n = n + 1
          転記先.Cells(n, 1).Value = 項目
          転記先.Cells(n, 2).Value = 内容 & Format(d, "(yy/m月分)")
          d = WorksheetFunction.EDate(d, 1)
        Loop Until d > 終了月
      Next
    End If
  Next

End Sub


 
・ツリー全体表示

【81267】CSVのヘッダーだけExcelで表示させるには
質問  VBA初心者です  - 20/4/29(水) 0:59 -

引用なし
パスワード
   ExcelでCSVを読み込むサンプルを使用して、CSVを読み込めるようになりました。

そのコードをふまえて、
「シート2」にCSVのヘッダーのみ出力したいのですが可能でしょうか?
また、処理後に「シート2」を表示した状態にしたいです。

現在使用のコードは

 Dim filepath As String
 With Application.FileDialog(msoFileDialogOpen)
  .AllowMultiSelect = False
  .Filters.Clear
  .Filters.Add "CSVファイル(*.csv)", "*.csv", 1
  .InitialFileName = ThisWorkbook.Path & "\"
  .Show
  
  If .SelectedItems.Count = 0 Then
   End
  End If
  
  filepath = .SelectedItems(1)
 End With
 
 Dim WS As Worksheet
 Set WS = ReadCSV.ReadCSV(filepath:=filepath, OutputWorksheet:=Worksheets("シート2"), OutputRow:=1)

上記となります。

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

【81266】Re:形を変えて表を転機したい
質問  よっちゃん  - 20/4/28(火) 22:16 -

引用なし
パスワード
   ▼マナ さん:
お返事ありがとうございます。
一つ目の確認事項ですが、
答えは、はい。です。

例に挙げた表の場合、

A あ(2020/4月)
・・省略
A あ(2021/1月
A う(2020/4月)
・・省略
A う(2021/1月)
A か(2020/4月)
・・省略
A か(2021/1月)
C え(2020/4月)
・・省略
C え(2021/1月)
D い(2020/4月)
・・省略
D い(2021/1月)

という結果になります。
Aの項目にあるものから順にリストにしたいんです。

22行目に項目、23行目以下に内容が入っているので、
A,B,C,Dそれぞれの最終行取得して、一番下にあるものを確認して何行目まであるか確認していました。
多くても、一つの項目で10行くらいに収まるようにはしていますが、
今のところそれが絶対ではないので、行数を最初から固定していませんでした。

すみません、知識が乏しくそういった単純なものしか浮かばずなので、
みなさんのアドバイスをいただきたく、投稿させていただいた次第です。

よろしくお願いします。

>▼よっちゃん さん:
>
>>シート1には
>>行 A B C D
>>23 あ    い
>>24 う  え
>>25 か 
>
>何行目にあるかは、結果に影響しないということですか。
>
>項目Cについて、「え」が24行目でも、23行目でも
>シート2への転記結果は、同じですか。
>
>>行数は変動あり。
>
>では、シート1の表が何行あるのか、どどうすれば判断できますか。
・ツリー全体表示

【81265】Re:形を変えて表を転機したい
発言  マナ  - 20/4/28(火) 19:12 -

引用なし
パスワード
   ▼よっちゃん さん:

>シート1には
>行 A B C D
>23 あ    い
>24 う  え
>25 か 

何行目にあるかは、結果に影響しないということですか。

項目Cについて、「え」が24行目でも、23行目でも
シート2への転記結果は、同じですか。

>行数は変動あり。

では、シート1の表が何行あるのか、どどうすれば判断できますか。
・ツリー全体表示

【81264】形を変えて表を転機したい
質問  よっちゃん  - 20/4/28(火) 17:21 -

引用なし
パスワード
   表の転記について、ご教示いただきたくよろしくお願いします。
シート1に入力された表を、シート2に形を変えて転機する作業を自動化したい。
シート1の中段にある表の内容をシート2の指定箇所に、
リストの形で、かつ各項目を指定した月数分表示したい。

表の中は、ランダムに必要な個所のみが入力されている状態です。
*列はB22:F22に項目名

シート1には
行 A B C D
23 あ    い
24 う  え
25 か    

行数は変動あり。
月数は、20/4月〜21/1月のように、別セルに指定。
月は、同セル内にあ+月で表示したい
書き出し後は、シート2に
A あ(20/4月分)
A あ(20/5月分)
A あ(20/6月分)
A あ(20/7月分)
A あ(20/8月分)
A あ(20/9月分)
A あ(20/10月分)
A あ(21/1月分)
A う(20/4月分)
A う(20/5月分)
A う(20/6月分)
A う(20/7月分)
A う(20/8月分)
A う(20/9月分)
A う(20/10月分)
A う(21/1月分)
A か(20/4月分)
A か(20/5月分)
A か(20/6月分)
A か(20/7月分)
A か(20/8月分)
A か(20/9月分)
A か(20/10月分)
A か(21/1月分)
C え(20/4月分)
C え(20/5月分)
C え(20/6月分)
C え(20/7月分)
C え(20/8月分)
C え(20/9月分)
C え(20/10月分)
C え(21/1月分)





の形で、セルを分けて、項目、入力内容+月の順に表示させたいです。

似ている作業を配列でしている方がいらっしゃいましたが、
理解しきれず、月を足して行を増やすやり方もわかりませんでした。

できるだけ構文を短く、ループなどでダラダラ長くなってしまわないように、
考えたいと思っています。

アドバイスのほど、宜しくお願いいたします。
・ツリー全体表示

【81263】Re:カーソルを移動
発言  マナ  - 20/4/23(木) 22:57 -

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

MsgBox Columns(1).Find(what:="*", LookIn:=xlValues).Address
・ツリー全体表示

【81262】Re:カーソルを移動
質問  yuji  - 20/4/23(木) 21:26 -

引用なし
パスワード
   ▼マナ さん:
アドバイスありがとうございます。

しかし、ファイルデータは例えば次にA10に”かかか”、その次にA9に”せせせ”という具合にどんどんウエニ追加されていきます。
つまり一番上の文字列は特定することができません。

それでもFINDを使ってできるのでしょうか?
(初心者なのでよくわからないため失礼な質問ですみません)
・ツリー全体表示

【81261】Re:カーソルを移動
発言  マナ  - 20/4/22(水) 21:04 -

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

検索(Find)を使ってみてはどうでしょうか。
・ツリー全体表示

【81260】カーソルを移動
質問  yuji  - 20/4/22(水) 5:16 -

引用なし
パスワード
   マクロ初心者です。

シートに書かれたデータの最初の行にカーソルを移動させたいのですが、うまくいきません。

例えばA列の2行目から100行目まで数式を使ってデータが入力されています。

   A    B
2 (空白)  8
3 (空白)
4 (空白)
5 (空白)
6 (空白)
7 (空白)
8 (空白)
9 (空白)
10 あああ
11 ううう
12 えええ
13 ききき
14 けけけ
15 こここ



データ管理上下から上へデータが追加されているのですが、この最初の文字列のあるA10にカーソルを置きたいのです。

そこでB2に空白の数を書いて、

Cells(Range("B2"),1)).Select
と書いてみましたが、うまくいきません。

どこが間違っているのでしょうか?
また、A10にカーソルを移動するにはどうすればいいのでしょうか?
・ツリー全体表示

【81258】Re:VBA スクレイピングについて
発言  γ  - 20/4/16(木) 19:13 -

引用なし
パスワード
   Long変数k を使って、
最初に k = 1 として、
ループの中で
    k = k + 1
    Sht.Cells(k, 5).Value = href.buf
のようにすれば5列目に順次書き込めるのでは?

正直申し上げて提示されているコードと
質問内容の落差がありすぎて、何か不思議な気がします。
質問内容を誤解しているのでしょうか。
・ツリー全体表示

【81257】VBA スクレイピングについて
質問  さくら E-MAIL  - 20/4/16(木) 17:12 -

引用なし
パスワード
   はじめまして。
現在会社の課題としてエクセルVBAを使用し、スクレイピングをしております。

どれだけ調べても解決することができなく、
ご教授頂ければと思いこちらを使わせていただきました。

以下のコードまで作成したのですが、
.getElementsByClassNameで取得した情報100件をExcelのA2から表示させたいです。
Debug.Printでイミディエイトには出力した情報100件は表示されているのですが
どこをどうすればセルに出力させるのかがわかりません。

そのほか修正すべき点があればこちらも教えていただきたいです。
宜しくお願い致します。

ーーーーーーーーーーーーーー

'IEを開く
 
  Dim objIE As InternetExplorer 'IEオブジェクトを準備
  Set objIE = CreateObject("Internetexplorer.Application")
  objIE.Visible = True 'True:IEを表示 , False:IEを非表示

'URLを指定
  Dim strOpenURL As String  'URL
  strOpenURL = "URL" 
  objIE.navigate strOpenURL '指定したURLを開く
  
'画面が表示されるまで少し待つ
  Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
    DoEvents
  Loop  

'インデックス1番目のシート
  Dim sht As Worksheet
  Set sht = Worksheets(1)

'WorksheetのSetting
  Dim j As Integer
  j = 0
  sht.Cells(1, 1).Value = "企業名"       'A1の項目名
  sht.Cells(1, 2).Value = "住所"        'B1の項目名
  sht.Cells(1, 3).Value = "電話番号"      'C1の項目名
  sht.Cells(1, 4).Value = "メールアドレス"   'D1の項目名

'画面のデータの取得
  Dim htmlDoc As HTMLDocument
  Set htmlDoc = objIE.document
  
'各企業のURLを取得
'
  Dim anchor As HTMLAnchorElement
  For Each anchor In htmlDoc.getElementsByClassName("ts-h-search-cassetteTitleMain js-h-search-cassetteTitleMain")
    Debug.Print anchor.href
    
  Next anchor
  
  objIE.Quit
・ツリー全体表示

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