回答編集履歴

7

修正

2020/12/29 15:23

投稿

退会済みユーザー
test CHANGED
@@ -42,21 +42,11 @@
42
42
 
43
43
 
44
44
 
45
- 推測すると与えられたstring変数がsplit関数を持ってないから、ということじゃないかと思いました。
45
+ エラーメッセージより関数に渡された数がsplit関数を持ってない、ということではないかと推測しました。
46
-
47
-
48
-
49
- そこでf7conv関数の冒頭で
46
+
50
-
51
- `Logger.log(typeof string)`
47
+
52
-
53
- を打ってログを見てみると、objectと表示されました。
48
+
54
-
55
-
56
-
57
- また、queryが返す型を調べるため、スプレッドシート上のシート1のA2セルに試しに
58
-
59
- `=TYPE(query('フォームの回答 1'!$A$2:$BO,"select ("&SUBSTITUTE(ADDRESS(1,match(K1,'フォームの回答 1'!$A$1:$BO$1,0),4),1,)&")"))`
49
+ そこで、queryが返す型を調べるため、スプレッドシート上のシート1のA2セルに試しに`=TYPE(query('フォームの回答 1'!$A$2:$BO,"select ("&SUBSTITUTE(ADDRESS(1,match(K1,'フォームの回答 1'!$A$1:$BO$1,0),4),1,)&")"))`
60
50
 
61
51
  と入力したところ、
62
52
 
@@ -68,25 +58,143 @@
68
58
 
69
59
 
70
60
 
71
- つまりf7conv関数は、文字列ではなく配列を受け取っており、それを直接splitしようとしてるのでダメんじゃないかと思いました
72
-
73
-
74
-
75
- したがって、f7conv関数で引数から文字列を取り出して処理すればいいのではないか、と思いました。。
76
-
77
-
78
-
79
- 具体的には
80
-
81
- ```
82
-
83
- function f7conv(strings) { //引数名変更
84
-
85
- var result = '';
86
-
87
- var string = strings[0][0]; //追加
88
-
89
- (以下略)
61
+ つまりf7conv関数は、文字列ではなく配列を受け取っており、それを直接splitしようとしてるのでエラーにるのでは
62
+
63
+
64
+
65
+
66
+
67
+ たとえば、GoogleスプレッドシートのK2セル以降に下記のように記録された場合・・・
68
+
69
+ ```GoogleSpread
70
+
71
+   [K列]
72
+
73
+ 1行目 質問12
74
+
75
+ 2行目 アイウエオ
76
+
77
+ 3行目 カキクケコ
78
+
79
+ 4行目 サシスセソ
80
+
81
+ ```
82
+
83
+
84
+
85
+ f7conv( )関数に渡される、`query('フォームの回答 ~~)`という数式は、
86
+
87
+ 下記のような形式の配列となります。
88
+
89
+
90
+
91
+ ```GAS
92
+
93
+ [["アイウエオ"],["カキクケコ"],["サシスセソ"]]
94
+
95
+ ```
96
+
97
+
98
+
99
+ したがって、f7conv( )関数は、この渡された配列を、全角の形式に直し
100
+
101
+ ```
102
+
103
+ [["アイウエオ"],["カキクケコ"],["サシスセソ"]]
104
+
105
+ ```
106
+
107
+ の形で返す関数にすればよいはずです。
108
+
109
+
110
+
111
+
112
+
113
+ 具体的には下記のコードになります。
114
+
115
+ ```
116
+
117
+ function f7conv(texts) {
118
+
119
+ //最終的に返す配列を定義
120
+
121
+ var textlist = [];
122
+
123
+ //配列からセル1つ1つを取り出して処理する。
124
+
125
+ for (var n in texts){
126
+
127
+ result = '';
128
+
129
+ _string = texts[n];
130
+
131
+
132
+
133
+ //変換する対象文字列をセット
134
+
135
+ var input = hankata;
136
+
137
+ var output = zenkata;
138
+
139
+
140
+
141
+ //引数で渡された文字を分割
142
+
143
+ var text = _string[0].split('');
144
+
145
+
146
+
147
+ //文字を再格納する配列を定義
148
+
149
+ var array = [];
150
+
151
+ //分割した文字の数だけループを回し、もし濁点・半濁点だった場合は1つ前の配列の中身とセットにして array に格納
152
+
153
+ for (var i = 0; i < text.length; i++) {
154
+
155
+ if (text[i] == "゙" || text[i] == "゚") {
156
+
157
+ array[array.length - 1] = (text[i - 1] + text[i]);
158
+
159
+ } else {
160
+
161
+ array.push(text[i]);
162
+
163
+ }
164
+
165
+ }
166
+
167
+
168
+
169
+ //再格納した文字の数だけループを回し、もし半角カナがあったら全角カナに直して result へ格納
170
+
171
+ for (var j = 0; j < array.length; j++) {
172
+
173
+ var index = input.indexOf(array[j]);
174
+
175
+ if (index == -1) {
176
+
177
+ result = result + array[j];
178
+
179
+ } else {
180
+
181
+ result = result + output[index];
182
+
183
+ }
184
+
185
+ }
186
+
187
+ //全角変換後の文字列を配列に格納する。
188
+
189
+ textlist.push([result])
190
+
191
+ }
192
+
193
+ //変換後の文字列を格納した配列を返す
194
+
195
+ return textlist;
196
+
197
+ }
90
198
 
91
199
  ```
92
200
 

6

修正

2020/12/29 15:23

投稿

退会済みユーザー
test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  5.「フォームの回答 1」のK1セルに、適当に項目名を入力する。
32
32
 
33
- 6.「フォームの回答 1」のK2セルに、適当に**半角カナ値(たとえば「アイウエオカキクコABCD」)**を入力する。
33
+ 6.「フォームの回答 1」のK2セルに、適当に**半角カナを含む値(たとえば「アイウエオカキクコABCD」)**を入力する。
34
34
 
35
35
 
36
36
 

5

修正

2020/12/29 05:03

投稿

退会済みユーザー
test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  5.「フォームの回答 1」のK1セルに、適当に項目名を入力する。
32
32
 
33
- 6.「フォームの回答 1」のK2セルに、適当に**半角カナの値(たとえば「アイウエオカキクコ」)**を入力する。
33
+ 6.「フォームの回答 1」のK2セルに、適当に**半角カナの値(たとえば「アイウエオカキクコABCD」)**を入力する。
34
34
 
35
35
 
36
36
 

4

修正

2020/12/29 05:02

投稿

退会済みユーザー
test CHANGED
@@ -54,7 +54,7 @@
54
54
 
55
55
 
56
56
 
57
- また、queryが返す型を調べるため、スプレッドシート上のシート1のa1セルに試しに
57
+ また、queryが返す型を調べるため、スプレッドシート上のシート1のA2セルに試しに
58
58
 
59
59
  `=TYPE(query('フォームの回答 1'!$A$2:$BO,"select ("&SUBSTITUTE(ADDRESS(1,match(K1,'フォームの回答 1'!$A$1:$BO$1,0),4),1,)&")"))`
60
60
 

3

修正

2020/12/29 04:47

投稿

退会済みユーザー
test CHANGED
@@ -28,9 +28,9 @@
28
28
 
29
29
 
30
30
 
31
- 5.「フォームの回答 1」のk1セルに、適当に項目名を入力する。
31
+ 5.「フォームの回答 1」のK1セルに、適当に項目名を入力する。
32
32
 
33
- 6.「フォームの回答 1」のk2セルに、適当に値(たとえば「あいうえお」)を入力する。
33
+ 6.「フォームの回答 1」のK2セルに、適当に**半角カナの値(たとえば「アイウエオカキクコ」)**を入力する。
34
34
 
35
35
 
36
36
 

2

修正

2020/12/29 04:42

投稿

退会済みユーザー
test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
 
36
36
 
37
- すると、「シート1」では#Error表示になり、マウスカーソルを保存すると、「TypeError: string.split is not a function(行 79)が発生しました。」という表示が確かに現れますね。
37
+ すると、「シート1」ではA1セルが#Error表示になり、エラーセルにマウスカーソルをあてると、確かに「TypeError: string.split is not a function(行 79)が発生しました。」という表示が現れますね。
38
38
 
39
39
 
40
40
 
@@ -93,3 +93,7 @@
93
93
 
94
94
 
95
95
  とすればエラーはなくなると思います。
96
+
97
+
98
+
99
+ 繰り返しになりますが**実行する際の詳細が明らかにされておらず、実行環境が異なるかもしれないので、上記のようにコードを直したとしても質問者さんのご希望に沿う動作になるとは限らないことをご了承ください。**

1

修正

2020/12/29 04:39

投稿

退会済みユーザー
test CHANGED
@@ -42,13 +42,11 @@
42
42
 
43
43
 
44
44
 
45
- 推測すると、
46
-
47
- string変数がsplit関数を持ってないということじゃないかと思いました。
45
+ 推測すると、与えられたstring変数がsplit関数を持ってないから、ということじゃないかと思いました。
48
46
 
49
47
 
50
48
 
51
- そこで関数の冒頭で
49
+ そこでf7conv関数の冒頭で
52
50
 
53
51
  `Logger.log(typeof string)`
54
52
 
@@ -56,27 +54,25 @@
56
54
 
57
55
 
58
56
 
59
- また、スプレッドシート上のシート1のa1セル試しに
57
+ また、queryが返す型を調べるため、スプレッドシート上のシート1のa1セル試しに
60
58
 
61
59
  `=TYPE(query('フォームの回答 1'!$A$2:$BO,"select ("&SUBSTITUTE(ADDRESS(1,match(K1,'フォームの回答 1'!$A$1:$BO$1,0),4),1,)&")"))`
62
60
 
63
- すると、
61
+ 入力したころ
64
62
 
65
- 「64」と表示されま
63
+ 「64」と表示されました
66
64
 
67
65
 
68
66
 
69
- ヘルプを見ると、これは配列ので、query関数は配列を返すといことがわかりますね、
67
+ ヘルプを見ると、64配列」を意味するので、query関数は配列を返すすね、
70
68
 
71
69
 
72
70
 
73
- つまりf7conv関数は、文字列ではなく配列を受け取っているのに、それを直接splitしようとしてるのでダメなんじゃないかと思いました。
71
+ つまりf7conv関数は、文字列ではなく配列を受け取っており、それを直接splitしようとしてるのでダメなんじゃないかと思いました。
74
72
 
75
73
 
76
74
 
77
-
78
-
79
- したがって、f7conv関数で処理対象をstringにすればいいのではないょうか
75
+ したがって、f7conv関数で引数から文字列を取り出して処理すればいいのではないか、と思いま
80
76
 
81
77
 
82
78
 
@@ -96,4 +92,4 @@
96
92
 
97
93
 
98
94
 
99
- したらエラーはなくなした
95
+ すればエラーはなくなると思い