- 転記先スプレッドシート(SampleB,SampleCも同じレイアウト)

実現したいこと
ここに実現したいことを箇条書きで書いてください。
- エラーを解消して転記先のスプレッドシートに転記したい
- シート名を検索して見つけているはずなに、なぜか見つかりませんとエラーメッセージが出てくる。
前提
- 転記元のスプレッドシート画像の右上にプルダウンと送信ボタンがあると思いますが、プルダウンで実行したい関数を選び送信ボタンで実行する感じです。
- 転記元スプレッドシートから特定の値を取得して、指定した転記先のスプレッドシート内の決められた値に転記したいです。
- 転記できるスプレッドシートとできないスプレッドシートがありました。転記できるスプレッドシートを複製して試したがダメでした。
発生している問題・エラーメッセージ
範囲の行数には 1 以上を指定してください
該当のソースコード
function onButtonClick() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const targetRow = 取得したい項目名が記載されている行; const word = "取得したい項目名A"; const lastColumn = sheet.getLastColumn(); const rowValues = sheet.getRange(targetRow, 1, 1, lastColumn).getValues()[0]; const columnIndex = rowValues.indexOf(word); if (columnIndex === -1) { SpreadsheetApp.getUi().alert(`値 "${word}" は行内に見つかりませんでした`); return; } const staffName = sheet.getRange("H4").getValue(); const ssidName = sheet.getRange("I4").getValue(); const dropdownCell = sheet.getRange("J4"); const selectedOption = dropdownCell.getValue(); const data = sheet.getRange(9, 1, sheet.getLastRow() - 8, sheet.getLastColumn()).getValues(); const targetRowIndex = data.findIndex(row => row[columnIndex] === ssidName); if (targetRowIndex === -1) { SpreadsheetApp.getUi().alert(`${ssidName} に一致する管理IDが見つかりませんでした`); return; } const relatedItems = ["取得したい項目名B"]; const relatedGrams = {}; relatedItems.forEach(item => { const itemIndex = rowValues.indexOf(item); if (itemIndex !== -1) { relatedGrams[item] = data[targetRowIndex][itemIndex]; } else { console.log(`${item} は見つかりませんでした`); } }); const targetSpreadsheets = [ '転記先スプレッドシートURLを記載A', '転記先スプレッドシートURLを記載B', '転記先スプレッドシートURLを記載C' ]; if (selectedOption === "追加/上書き") { processTransfer(targetSpreadsheets, staffName, ssidName, relatedGrams); } else if (selectedOption === "削除") { handleRecordOperation(targetSpreadsheets, staffName, ssidName); } else if (selectedOption === "終了") { processOption3(); } else { SpreadsheetApp.getUi().alert("有効なオプションが選ばれていません。"); } } //実装がうまくいかないところ↓ function processTransfer(targetSpreadsheets, staffName, ssidName, relatedGrams) { for (const spreadsheetId of targetSpreadsheets) { try { // const targetSheet = getTargetSheet(spreadsheetId, staffName); // スプレッドシートIDでスプレッドシートを開く const spreadsheet = SpreadsheetApp.openById(spreadsheetId); // シート一覧を取得 const sheets = spreadsheet.getSheets(); // 対象となるシートを取得するためにループ let targetSheet = null; for (let i = 0; i < sheets.length; i++) { if (sheets[i].getName() === staffName) { targetSheet = sheets[i]; break; // 対象シートを見つけたらループを抜ける } } // 対象シートが見つからない場合 if (!targetSheet) { throw new Error(`シート "${staffName}" が見つかりませんでした`); } // 各スプレッドシートIDに対して実行される処理 console.log(`処理中のシート名: ${staffName}`); console.log(`処理中のスプレッドシートID: ${spreadsheetId}`); // シートが見つからない場合はエラーを出力 if (!targetSheet) { console.log(`エラー: シート "${staffName}" が見つかりませんでした`); return; // シートが見つからなければ処理を中断 } // シートが見つかった場合の処理 console.log(`シート "${staffName}" が見つかりました`); const targetRow = 1; const dataStartRow = 2; const targetItems = targetSheet.getRange(targetRow, 1, 1, targetSheet.getLastColumn()).getValues()[0]; const missingItems = Object.keys(relatedGrams).filter(item => !targetItems.includes(item)); if (missingItems.length > 0) { SpreadsheetApp.getUi().alert(`次の項目が転記先に見つかりません: ${missingItems.join(", ")}`); return; } const referenceIndex = targetItems.indexOf("管理ID"); const targetData = targetSheet.getRange(dataStartRow, referenceIndex + 1, targetSheet.getLastRow() - dataStartRow + 1).getValues(); const targetRowIndex = targetData.findIndex(row => row[0] === ssidName); if (targetRowIndex === -1) { const newRowIndex = targetSheet.getLastRow() + 1; targetSheet.getRange(newRowIndex, referenceIndex + 1).setValue(ssidName); Object.entries(relatedGrams).forEach(([item, gram]) => { const itemIndex = targetItems.indexOf(item); if (itemIndex !== -1) { targetSheet.getRange(newRowIndex, itemIndex + 1).setValue(gram); } }); } else { Object.entries(relatedGrams).forEach(([item, gram]) => { const itemIndex = targetItems.indexOf(item); if (itemIndex !== -1) { targetSheet.getRange(dataStartRow + targetRowIndex, itemIndex + 1).setValue(gram); } }); } } catch (error) { SpreadsheetApp.getUi().alert(`転記中にエラーが発生しました: ${error.message}`); } } } //今は無視してください function handleRecordOperation(targetSpreadsheets, staffName, ssidName) { for (const spreadsheetId of targetSpreadsheets) { try { const targetSheet = getTargetSheet(spreadsheetId, staffName); if (!targetSheet) throw new Error(`シート "${staffName}" が見つかりませんでした`); const lastRow = targetSheet.getLastRow(); const columnValues = targetSheet.getRange(1, 1, lastRow, 1).getValues(); const existingRow = columnValues.findIndex(row => row[0] === ssidName); if (existingRow !== -1) { targetSheet.deleteRow(existingRow + 1); SpreadsheetApp.getUi().alert(`管理ID "${ssidName}" を削除しました。`); } else { SpreadsheetApp.getUi().alert(`該当するID "${ssidName}" は存在しませんでした。`); } } catch (error) { Logger.log(`エラー: ${error.message}`); } } } //今は無視してください function processOption3() { SpreadsheetApp.getUi().alert("担当者ステータスが更新されました。"); } //今は無視してください function getTargetSheet(spreadsheetId, sheetName) { const ss = SpreadsheetApp.openById(spreadsheetId); const sheets = ss.getSheets(); return sheets.find(sheet => sheet.getName() === sheetName); }
試したこと
- console.logで(!targetSpreadsheet)などで見つけているかどうかの確認をしました。
- リンク等の誤字脱字をチェックしました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
そのエラーはどの行で出るのですか?
そこで指定している値が何になっているかを確認しましたか?
ご回答ありがとうございます。
エラーがどの行に出ているかについてですが、アラートやコンソールログでエラーメッセージが出るようにしたのですが、タイトルのエラーメッセージしか出てこないです。他にエラーの詳細内容が表示できるようにする記述があるのであればご教授いただければ幸いです。
宜しくお願い致します。
エディタ上で実行すれば実行ログに出てくると思うのですが出てきませんか?
あとエラーメッセージからの想像でしかないのですがgetRangeを使用している箇所の行数部分が1未満になっているか確認してみてはどうでしょうか。
コードを実行してみましたがシートがどのようになっているか分からないので現象が再現できません。
スプレッドシートの画像とエディタの実行画面結果をお送りしております。お手すきの際にご確認よろしくお願い致します。
>あとエラーメッセージからの想像でしかないのですがgetRangeを使用している箇所の行数部分が1未満になっているか確認してみてはどうでしょうか。
-こちらについては試させていただきます。ありがとうございます。
エディタからデバッグ実行したらエラー発生行で停止したりしませんかね?
また発生しているエラーはどこかのtry~cahtchに引っかかったところでのalertメッセージで出ているんですかね?
提示していただいた実行ログですとLogger.logでの出力でのメッセージではなさそうなので
targetSheet.getLastRow() - dataStartRow + 1の値が何になっているかなど確認してみてはどうでしょうか。
デバック結果画像を表示しております。最初に紫色で表示されておりました。
>targetSheet.getLastRow() - dataStartRow + 1の値が何になっているかなど確認してみてはどうでしょうか。
-確認してみます。ありがとうございます。
確認してみましたが問題はなさそうでした。他にどこ見せる必要のある個所はありますでしょうか?
targetSheetが見出し行のみ(提示されている転記先スプレッドシートの画像)の場合、
targetSheet.getLastRow()は1で
1-2+1となり計算結果が0になりませんか?
そうなるとgetRangeで取得する行が0となりエラーとなるのではないかと思います。
このようなパターンだったりしませんかね?
ありがとうございます。
ですが、今回3枚ほど転記先のスプレッドシート(同じレイアウト)を用意して1枚だけ動くには動いているんです。アラートでシート○○が見つかりませんでした。と出るんですが、指定の位置への転記はできてるんですよね。てことはエラーが起きているのはシート名やスプレッドシートのリンクの取得に問題あるんじゃないかなと思ったんですけど、どうでしょうか?
転記先のスプレッドシート全てに書き込み先のシート(シート○○)があるのでしょうか?
もしその転記先のスプレッドシートのどれかにそのシート名のものがなかった場合
そのスプレッドシートの処理時にthrowが実行されます。
そこでcatch内部が実行されてアラート(シート○○が見つかりませんでした。)が表示されます。
そして次のスプレッドシートの処理となります。
もし
// シートが見つからない場合はエラーを出力
if (!targetSheet) {
console.log(`エラー: シート "${staffName}" が見つかりませんでした`);
return; // シートが見つからなければ処理を中断
}
こちらの処理にてこの関数が中断されるはずと考えていらっしゃるなら、この処理は実行されていないこととなります。
できるなら、デバッグ実行でステップ実行していってどのように動いているのか確認してみるといいかもしれません。
回答ありがとうございます(´;ω;`)ウッ…)
>転記先のスプレッドシート全てに書き込み先のシート(シート○○)があるのでしょうか?
-全てスプレッドシートにはシート名つけています。英語一文字で試したり、小文字だけの簡単な文字だけというのも試してみました。ですが、特定のスプレッドシート以外が処理されませんでした。
>できるなら、デバッグ実行でステップ実行していってどのように動いているのか確認してみるといいかもしれません。
-エラーで停止し、紫色で表示されたところをすべて画像で移しますので、少しお待ちください。
追加でデバックした場合の紫で表示された部分をお送りいたします。急ぎで行ったため、被り等の不備があるかもしれません。お手数をおかけしますがご確認お願い致します。
画像がどういうときのどういった画像なのかこちらでは分かりません。
対象のスプレッドシート(サンプルA~C)全てに”SampleC”というシートが存在するのですか?
for (let i = 0; i < sheets.length; i++) {
if (sheets[i].getName() === staffName) {
targetSheet = sheets[i];
break; // 対象シートを見つけたらループを抜ける
}
}
の部分で
Logger.log('比較対象:' + staffName);
for (let i = 0; i < sheets.length; i++) {
Logger.log(sheets[i].getName());
if (sheets[i].getName() === staffName) {
targetSheet = sheets[i];
break; // 対象シートを見つけたらループを抜ける
}
}
といった感じでログ出力して確認したらどのように表示されますか?
またこの内容は「範囲の行数には 1 以上を指定してください」とはずれた内容になっていますが
こちらのほうはどうなったのですか?
頂いたコードで実行した結果を画像に追加しております。お手すうですがご確認よろしくお願い致します。
>対象のスプレッドシート(サンプルA~C)全てに”SampleC”というシートが存在するのですか?
- それぞれSampleA,SampleB,SampleCとシート名を記載しております。
>またこの内容は「範囲の行数には 1 以上を指定してください」とはずれた内容になっていますが
こちらのほうはどうなったのですか?
- 話がずれてしまい申し訳ございません。こちらに関してはまだ改善されておりません。
画像の管理IDが記載転記先のスプレッドシートの画像の管理IDについてですが、転記先に管理IDを記載した状態で転記元のbuttonclickを実行したら転記することができました。その時はアラートで”範囲の行数には 1 以上を指定してください”と表示はされませんでした。一つもやもや解消されました。ありがとうございます。
ですが、転記先に管理IDが記載されていない状態で追加しようとすると今までと同じようなエラーが出てしまいます。
targetSheet.getLastRow()あたりの行列の値の取得の記述が問題なんでしょうか?
> ですが、転記先に管理IDが記載されていない状態で追加しようとすると今までと同じようなエラーが出てしまいます。
> targetSheet.getLastRow()あたりの行列の値の取得の記述が問題なんでしょうか?
以前にコメントした
>targetSheet.getLastRow()は1で
>1-2+1となり計算結果が0になりませんか?
といったことになっていませんか?
>頂いたコードで実行した結果を画像に追加しております。
こちらの結果が出たときは「シート”SampleA”が見つかりませんでした。」とアラートが出たのでしょうか?
2つ目、3つ目のスプレッドシートにはSampleAというシートがあるように見えないのですが実際どのようになっていますか?
ログを見る限り
1つ目のスプレッドシート:SampleAというシート
2つ目のスプレッドシート:SampleBというシート
3つ目のスプレッドシート:SampleCというシート
といった構成に見えます。
転記先のスプレッドシートそれぞれにどのようなシートが存在するか画像を載せることは可能でしょうか。
>こちらの結果が出たときは「シート”SampleA”が見つかりませんでした。」とアラートが出たのでしょうか?
2つ目、3つ目のスプレッドシートにはSampleAというシートがあるように見えないのですが実際どのようになっていますか?
- アラートにはこのように表示されました。各転記先シートを指定した状態で新規追加の実行を行った場合に出てくるアラートです。転記先のスプレッドシートには画像と同じ1行目に項目のみでそれからしたは空の状態。各スプレッドシート上から順にアラートが出てきました。
SampleAシート
1転記中にエラーが発生しました: 範囲の行数には 1 以上を指定してください。
2転記中にエラーが発生しました: 範囲の行数には 1 以上を指定してください。
3転記中にエラーが発生しました: 範囲の行数には 1 以上を指定してください。
SampleBシート
1転記中にエラーが発生しました: targetSheet is not defined
2転記中にエラーが発生しました: 範囲の行数には 1 以上を指定してください。
3転記中にエラーが発生しました: 範囲の行数には 1 以上を指定してください。
SampleCシート
1転記中にエラーが発生しました: targetSheet is not defined
2転記中にエラーが発生しました: targetSheet is not defined
3転記中にエラーが発生しました: 範囲の行数には 1 以上を指定してください。
>転記先のスプレッドシートそれぞれにどのようなシートが存在するか画像を載せることは可能でしょうか。
- 転記先のスプレッドシートには一枚のシートしかありません。画像にてSampleAのスプレッドシートの画像をお送りしております。転記先のシートはすべてこのような感じなります。
>>targetSheet.getLastRow()は1で
>>1-2+1となり計算結果が0になりませんか?
といったことになっていませんか?
- なっているかもしれません。確認してみます。
「範囲の行数には 1 以上を指定してください」の件は置いておいて
processTransfer関数を1回実行したら処理は以下のようになっています。(staffNameがSampleAの場合)
1.SampleAのスプレッドシートを開く
2.シート一覧を取得する
3.シート一覧から対象(SampleA)を探す
4.SampleAが見つかった
5.処理する
6.SampleBのスプレッドシートを開く
7.シート一覧を取得する
8.シート一覧から対象(SampleA)を探す
9.SampleAが見つからない
10.throw new Error(`シート "${staffName}" が見つかりませんでした`);が実行される
11.catch 句まで飛ぶ
12.SpreadsheetApp.getUi().alert(`転記中にエラーが発生しました: ${error.message}`)の処理でアラートが表示される
13.SampleCのスプレッドシートを開く
14.シート一覧を取得する
15.シート一覧から対象(SampleA)を探す
16.SampleAが見つからない
17.throw new Error(`シート "${staffName}" が見つかりませんでした`);が実行される
18.catch 句まで飛ぶ
19.SpreadsheetApp.getUi().alert(`転記中にエラーが発生しました: ${error.message}`)の処理でアラートが表示される
まず上記の処理が思っている処理になっていますか?
function onButtonClick() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const targetRow = 8;
const word = "管理ID";
const lastColumn = sheet.getLastColumn();
const rowValues = sheet.getRange(targetRow, 1, 1, lastColumn).getValues()[0];
const columnIndex = rowValues.indexOf(word);
if (columnIndex === -1) {
SpreadsheetApp.getUi().alert(`値 "${word}" は行内に見つかりませんでした`);
return;
}
const staffName = sheet.getRange("H4").getValue();
const ssidName = sheet.getRange("I4").getValue();
const dropdownCell = sheet.getRange("J4");
const selectedOption = dropdownCell.getValue();
const data = sheet.getRange(9, 1, Math.max(sheet.getLastRow() - 8, 0), sheet.getLastColumn()).getValues();
const targetRowIndex = data.findIndex(row => row[columnIndex] === ssidName);
if (targetRowIndex === -1) {
SpreadsheetApp.getUi().alert(`${ssidName} に一致する管理IDが見つかりませんでした`);
return;
}
const relatedItems = ["タスク", "校正期限"];
const relatedGrams = {};
relatedItems.forEach(item => {
const itemIndex = rowValues.indexOf(item);
if (itemIndex !== -1) {
relatedGrams[item] = data[targetRowIndex][itemIndex];
} else {
console.log(`${item} は見つかりませんでした`);
}
});
const targetSpreadsheets = [
'1No2dfNz147Vpt7REuWRpCPj1V7-ZcVWtOke55Qsvuaw',
'1QHMoAuaaXEs2KeiLNfZ1UwuCNVgJ-5Xb3pIgtmFQYdY',
'1_8mzago7ODUkTClItfuzpACbEP7tBPMBF06iIdwz5nA'
];
if (selectedOption === "追加/上書き") {
processTransfer(targetSpreadsheets, staffName, ssidName, relatedGrams);
} else if (selectedOption === "削除") {
handleRecordOperation(targetSpreadsheets, staffName, ssidName);
} else if (selectedOption === "終了") {
processOption3();
} else {
SpreadsheetApp.getUi().alert("有効なオプションが選ばれていません。");
}
}
function processTransfer(targetSpreadsheets, staffName, ssidName, relatedGrams) {
for (const spreadsheetId of targetSpreadsheets) {
try {
const spreadsheet = SpreadsheetApp.openById(spreadsheetId);
const sheets = spreadsheet.getSheets();
let targetSheet = null;
Logger.log('比較対象:' + staffName);
for (let i = 0; i < sheets.length; i++) {
Logger.log(sheets[i].getName());
if (sheets[i].getName() === staffName) {
targetSheet = sheets[i];
break;
}
}
if (!targetSheet) {
throw new Error(`シート "${staffName}" が見つかりませんでした`);
}
const targetRow = 1;
const dataStartRow = 2;
const lastRow = targetSheet.getLastRow();
const rowCount = Math.max(lastRow - dataStartRow + 1, 0);
const targetItems = targetSheet.getRange(targetRow, 1, 1, targetSheet.getLastColumn()).getValues()[0];
const missingItems = Object.keys(relatedGrams).filter(item => !targetItems.includes(item));
if (missingItems.length > 0) {
SpreadsheetApp.getUi().alert(`次の項目が転記先に見つかりません: ${missingItems.join(", ")}`);
return;
}
const referenceIndex = targetItems.indexOf("管理ID");
const targetData = rowCount > 0
? targetSheet.getRange(dataStartRow, referenceIndex + 1, rowCount).getValues()
: [];
const targetRowIndex = targetData.findIndex(row => row[0] === ssidName);
if (targetRowIndex === -1) {
const newRowIndex = lastRow + 1;
targetSheet.getRange(newRowIndex, referenceIndex + 1).setValue(ssidName);
Object.entries(relatedGrams).forEach(([item, gram]) => {
const itemIndex = targetItems.indexOf(item);
if (itemIndex !== -1) {
targetSheet.getRange(newRowIndex, itemIndex + 1).setValue(gram);
}
});
} else {
Object.entries(relatedGrams).forEach(([item, gram]) => {
const itemIndex = targetItems.indexOf(item);
if (itemIndex !== -1) {
targetSheet.getRange(dataStartRow + targetRowIndex, itemIndex + 1).setValue(gram);
}
});
}
} catch (error) {
SpreadsheetApp.getUi().alert(`転記中にエラーが発生しました: ${error.message}`);
}
}
}
いただいたご質問の内容と違うんですが、追加、上書きの処理ができました。
修正コードは上記に添付しております。
>>targetSheet.getLastRow()は1で
>>1-2+1となり計算結果が0になりませんか?
といったことになっていませんか?
こちらについてですが、やはり0になりエラーが起こっていました。修正したら処理としては上書き、追加どちらも機能はしました。ご指摘いただきありがとうございます。
ですが、throw new Errorで指定のシートが見つかりませんとエラーが出てしまいます。
先ほど頂いた処理がこのようにできているかの質問に関してはこれからチェックしてお答えしますので、よろしくお願い致します。
>ですが、throw new Errorで指定のシートが見つかりませんとエラーが出てしまいます。
先ほど頂いた処理がこのようにできているかの質問に関してはこれからチェックしてお答えしますので、よろしくお願い致します。
シートを探すループ処理についてですが、下記の〇ソースコードを記述し実行すると下記の〇実行ログのようになりました。
〇実行ログ
12:25:09 情報 シート名:~の所で違うシート名も取得していたので、throw new Errorが出てきたんじゃないかと思います。今回はシートを3つ用意していたので、2回アラートでエラーメッセージが出てきました。
〇ソースコード
Logger.log('比較対象: ' + staffName); // staffNameの値を確認
for (let i = 0; i < sheets.length; i++) {
Logger.log('シート名: ' + sheets[i].getName()); // 各シート名を確認
if (sheets[i].getName() === staffName) {
Logger.log('一致したシート名: ' + sheets[i].getName()); // 一致した場合にログを出力
targetSheet = sheets[i];
break;
}
}
if (!targetSheet) {
Logger.log('targetSheetが見つかりませんでした');
} else {
Logger.log('targetSheetが見つかりました: ' + targetSheet.getName());
}
〇実行ログ
12:24:28 お知らせ 実行開始
12:25:09 情報 比較対象: SampleB
12:25:09 情報 シート名: SampleA
12:25:09 情報 targetSheetが見つかりませんでした
12:25:23 情報 比較対象: SampleB
12:25:23 情報 シート名: SampleB
12:25:23 情報 一致したシート名: SampleB
12:25:23 情報 targetSheetが見つかりました: SampleB
12:25:23 情報 比較対象: SampleB
12:25:23 情報 シート名: SampleC
12:25:23 情報 targetSheetが見つかりませんでした
12:24:47 お知らせ 実行完了
1つ目のシートに対象シート名が存在しないからアラートを表示する。
2つ目のシートに対象シート名が存在するから転記処理を行う。
3つ目のシートに対象シート名が存在しないからアラートを表示する。
上記の動作はプログラム通りの動きです。
実際に実現したい動作は
3つのシートのうち1つでも正常な処理(転記処理)を行ったらアラートは出さない。
3つのシート全てで対象シート名のシートが存在しない(転記処理を行わなかった)場合はアラートを表示する。
という内容だったりしますか?
>実際に実現したい動作は
>3つのシートのうち1つでも正常な処理(転記処理)を行ったらアラートは出さない。
>3つのシート全てで対象シート名のシートが存在しない(転記処理を行わなかった)場合はアラートを>表示する。
>という内容だったりしますか?
処理のエラーを探す場合は上記のような内容にしたいです。ですが、実装する場合は3つのシートのうち1つでも正常な処理(転記処理)を行ったらアラート出す。(例:SampleBに転記しました。)という処理を行いたいです。
対象スプレッドシート全てを処理した結果を出したいのであればループ内でアラート表示をするのではなく
正常だったスプレッドシート、NGだったスプレッドシートを配列等に格納するだけにして
ループが終わった後にその配列に格納されている数で判断してアラート処理をするなどすればいいのではないでしょうか。
let OKSheets = []
let NGSheets = []
for (const spreadsheetId of targetSpreadsheets) {
try {
// 処理
OKSheets.push(targetSheet.getName());
} catch {
NGSheets.push(targetSheet.getName());
}
}
if(OKSheets.length > 0) {
// OKシートがあるので正常終了アラート表示
} else {
// OKシートがないので異常終了アラート表示
}
}
とか
異常が複数の異常があった場合等を考慮しないといけないかとは思いますが・・・
ありがとうございます。
エラーやアラートのなどの問題が解決できました。親身になってご意見、ご提案頂き本当にありがとうございました。助かりました。
解決おめでとうございます!
解決方法をまとめて、「自己解決」として回答してください!
同じように困っている人の貴重な情報になると思います。
本当にありがとうございました。自己解決済みにし、修正版のソースコードを記載しております。またご機会がございましたら宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー




