teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

記入していなかったコードの記入。それに伴う説明文書の小変更

2021/12/15 04:44

投稿

ukuu
ukuu

スコア1

title CHANGED
@@ -1,1 +1,1 @@
1
- VBAを用いて48個のデータを6個ずつに分けて入力する方法
1
+ VBAを用いて.txt内の48個のデータを6個ずつに分けて入力する方法
body CHANGED
@@ -1,9 +1,11 @@
1
1
  ### 前提・実現したいこと
2
2
  VBAを使用し、下記のような入力がしたいです
3
+ ①.txtファイルを選択し、指定の48個のデータを抽出
4
+ ↑ここまではできています
3
- 48個のデータ内の最初の6個を、作業者が選択したセルから縦に入力
5
+ 48個のデータ内の最初の6個を、作業者が選択したセルから縦に入力
4
- 縦に4つ飛ばし、次の6個を縦に入力
6
+ 縦に4つ飛ばし、次の6個を縦に入力
5
- 最初に選択したセルから右に4行飛ばし、次の6個を入力 
7
+ 最初に選択したセルから右に4行飛ばし、次の6個を入力 
6
- また縦に4つ飛ばし、次の6個を入力
8
+ また縦に4つ飛ばし、次の6個を入力
7
9
   このループを4回分
8
10
 
9
11
  また、今回は48個・6個ずつ・4つ飛ばしとしていますが、
@@ -14,10 +16,102 @@
14
16
  ![イメージ説明](bd23fc1c68a904357c5ed4e267d4b5ab.jpeg)
15
17
  ### 発生している問題・エラーメッセージ
16
18
  ### 該当のソースコード
19
+ Sub 入力()
20
+ Dim NUMB As Variant
21
+ Dim 配列(9999) As Double
22
+ Dim i As Integer
23
+ Dim POG As Variant
24
+ Dim k As Integer
25
+ Dim strFileName As String
26
+ Dim strFilePath As String
27
+ Dim a As Long
17
28
 
29
+ strFilePath = "ファイルの場所"
30
+ strFileName = X(strFilePath)
31
+
32
+ Workbooks.OpenText Filename:= _
33
+ strFilePath & strFileName, Origin:=932, _
34
+ StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
35
+ ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
36
+ , Space:=False, Other:=False, fieldinfo:=Array(Array(1, 1), Array(2, 1), _
37
+ Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
38
+ Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array( _
39
+ 16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), _
40
+ Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array( _
41
+ 29, 1), Array(30, 1), Array(31, 1), Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1), _
42
+ Array(36, 1), Array(37, 1), Array(38, 1), Array(39, 1), Array(40, 1), Array(41, 1)), _
43
+ TrailingMinusNumbers:=True
44
+
45
+ Dim j As Long, l As Long
46
+ l = 1
47
+ For j = 2 To 1000
48
+ l = l + 1
49
+ If InStr(Cells(j, 4), "指定の文字列") = 0 Then
50
+ Exit For
51
+
52
+ End If
53
+ Next
54
+
55
+
56
+ For i = 1 To l
57
+ 入力(i) = Range("J" & i + 1).Value
58
+ Next
59
+
60
+ Workbooks(1).Worksheets("Sheet1").Activate
61
+
62
+ Set POG = Application.InputBox(prompt:="入力開始するセルをクリック", _
63
+ Default:=ActiveCell.Address, Type:=8)
64
+
65
+ l = l - 2
66
+ a = l / 8
67
+
68
+ For i = 1 To a
69
+ k = i - 1
70
+ POG.Offset(k, 0).Value = Round(入力(i))
71
+ Next
72
+
73
+ For i = a + 1 To a * 2
74
+ k = i - 7
75
+ POG.Offset(10 + k, 0).Value = Round(入力(i))
76
+ Next
77
+
78
+ For i = (a * 2) + 1 To a * 3
79
+ k = i - 13
80
+ POG.Offset(k, 4).Value = Round(入力(i))
81
+ Next
82
+
83
+ For i = (a * 3) + 1 To a * 4
84
+ k = i - 19
85
+ POG.Offset(10 + k, 4).Value = Round(入力(i))
86
+ Next
87
+
88
+ For i = (a * 4) + 1 To a * 5
89
+ k = i - 25
90
+ POG.Offset(k, 8).Value = Round(入力(i))
91
+ Next
92
+
93
+ For i = (a * 5) + 1 To a * 6
94
+ k = i - 31
95
+ POG.Offset(10 + k, 8).Value = Round(入力(i))
96
+ Next
97
+
98
+ For i = (a * 6) + 1 To a * 7
99
+ k = i - 37
100
+ POG.Offset(k, 12).Value = Round(入力(i))
101
+ Next
102
+
103
+ For i = (a * 7) + 1 To a * 8
104
+ k = i - 43
105
+ POG.Offset(10 + k, 12).Value = Round(入力(i))
106
+ Next
107
+
108
+ Workbooks(strFileName).Close True
109
+
110
+ Exit Sub
111
+
18
112
  ### 試したこと
19
- For文 If文を使って力技でやろうとしたのですが、あまりにもコードが汚くなってしまったので、諦めました
113
+ あまりにもコードが冗長になってしまったので
20
- きれいで分かりやすいコードを教えていただけるとありがたいです
114
+ きれいで分かりやすい書き方を教えていただけるとありがたいです
21
115
 
22
116
  ### 補足情報(FW/ツールのバージョンなど)
23
117
  Excel 2016 Win10 です