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

Q&A

解決済

5回答

1973閲覧

同じ名前のページは1枚だけ開いていてほしい

sumire_cl

総合スコア228

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

0グッド

1クリップ

投稿2018/03/27 04:37

編集2018/03/28 08:14

0

1

前提・実現したいこと

ExcelのシートのA列に伝票番号が列挙されています。
この伝票番号を、社内Webの伝票番号を登録するページに登録させるマクロを書きました。
IEで登録ページはもう開いておいて、そのページを見つけて捕まえて、順に伝票番号を入力して登録するような手順です。
IEのページを見つけるのは三流君とかの記事を見て学びました。
登録ページは、1件ずつ伝票番号をテキストボックスに入力して、登録ボタンを押すようになっています。

VBA

1 Dim sh As Object '起動中のShellWindow一式を格納する 2 Dim win As Object '各ShellWindowを格納する 3 Dim ie As InternetExplorer 'ShellWindowから見つけたIEを格納する 4 Dim document_title As String 'IEのドキュメントタイトルを格納する 5 Dim inputbutton As HTMLAnchorElement 'ボタンとかを探すときに要素を格納する 6 Dim i As Long 'イテレータ 7 Dim endRow As Long: endRow = ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row 'Sheet1の最終行 8 9 10 '*-- 起動中のShellWindow一式を変数shに格納 --* 11 Set sh = CreateObject("Shell.Application") 12 13 For Each win In sh.Windows 14 'ドキュメントタイトル取得失敗を無視(処理継続)--* 15 On Error Resume Next 16 17 If TypeName(win.document) = "HTMLDocument" Then 18 document_title = "" 19 document_title = win.document.Title 20 On Error GoTo 0 21 22 '*-- ページのタイトルで探す --* 23 Set ie = win 24 If InStr(document_title, "伝票番号入力") > 0 Then 25 26 '*-- シートの伝票番号の数だけ繰り返す --* 27 For i = 1 To endRow Step 1 28 '*-- 伝票番号を入れて登録ボタンを押す --* 29 ie.document.getElementsByName("denpyoNo")(0).Value = ThisWorkbook.Worksheets("Sheet1").Cells(i, 1).Value 30 For Each inputbutton In ie.document.getElementsByTagName("input") 31 If inputbutton.Value = "登録" Then 32 inputbutton.Click 33 Exit For 34 End If 35 Next 36 Do While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE 37 DoEvents 38 Loop 39 Next i 40 Exit For 41 Else 42 '*-- 画面を閉じる(登録画面以外のIE) --* 43 ie.Quit 44 End If 45 End If 46 Next 47 48 '*-- いろいろ解放 --* 49 Set sh = Nothing 50 Set ie = Nothing

発生している問題・エラーメッセージ

バカみたいにいっぱいIEを立ち上げてる人がいて(ウィンドウを開いたら開きっぱなしで閉じないスタイル)
なので伝票登録のこれ動作時に、同じ名前のウィンドウが複数開いていると、目的のと違うウィンドウを捕まえてしまうことが多く……

なので、これを動かす前に、この伝票番号入力ページが複数開いていたら
「開いてますよ!」と怒ったうえでこれの処理はしない、というようにしたいのですが
複数開いています、というのをどうやったらいいのか思いつきません。
「起動中のShellWindow一式を変数shに格納」の後に

VBA

1 cntPage = 0 2 For Each win In sh.Windows 3 'ドキュメントタイトル取得失敗を無視(処理継続)--* 4 On Error Resume Next 5 6 If TypeName(win.document) = "HTMLDocument" Then 7 document_title = "" 8 document_title = win.document.Title 9 On Error GoTo 0 10 11 '*-- ページのタイトルを数える --* 12 Set ie = win 13 If InStr(document_title, "伝票番号入力") > 0 Then 14 cntPage=cntPage + 1 15 End If 16 End If 17 Next 18 If cntPage <> 1 then 19 MsgBox "IEは目的の1枚だけ開いておいてあとは閉じてください" 20 Exit Sub 21 End If

みたいなのを書けばよいのでしょうか。
同じようなコードが2回来るのってみっともなくないでしょうか。

補足情報(FW/ツールのバージョンなど)

Win10、Excel2016、IE11です。

###追加1
皆様ありがとうございます!
教えていただいた内容を踏まえて、関数にしてみました。

VBA

1Sub entryDenpyo() 2 3 Dim sh As Object '起動中のShellWindow一式を格納する 4 Dim win As New Collection '各ShellWindowを格納する 5 Dim ie As InternetExplorer 'ShellWindowから見つけたIEを格納する 6 Dim document_title As String 'IEのドキュメントタイトルを格納する 7 Dim inputbutton As HTMLAnchorElement 'ボタンとかを探すときに要素を格納する 8 Dim i As Long 'イテレータ 9 Dim endRow As Long: endRow = ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row 'Sheet1の最終行 10 11 12 '*-- 起動中のShellWindow一式を変数shに格納 --* 13 Set sh = CreateObject("Shell.Application") 14 15 '*-- IEで開かれている[伝票番号入力]ページを探す、1個だけ開かれてるんじゃなかったら処理はしない。 --* 16 Set win = FindPages(sh,"伝票番号入力") 17 If win.Count = 1 Then 18 Set ie = win(1) 19 Else 20 MsgBox ("伝票番号入力画面を1個だけ開いて、あとは閉じてください。") 21 Exit Sub 22 End If 23 24 '*-- シートの伝票番号の数だけ繰り返す --* 25 For i = 1 To endRow Step 1 26 '*-- 伝票番号を入れて登録ボタンを押す --* 27 ie.document.getElementsByName("denpyoNo")(0).Value = ThisWorkbook.Worksheets("Sheet1").Cells(i, 1).Value 28 For Each inputbutton In ie.document.getElementsByTagName("input") 29 If inputbutton.Value = "登録" Then 30 inputbutton.Click 31 Exit For 32 End If 33 Next 34 Do While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE 35 DoEvents 36 Loop 37 Next i 38 39 '*-- いろいろ解放 --* 40 Set sh = Nothing 41 Set ie = Nothing 42 43End Sub 44 45'*-- 開いているIEのページをcollectionに入れて戻す --* 46Function FindPages(ByVal shs As Object,ByVal pagetitle as string) As Collection 47 48 Dim win As Object '各ShellWindowを格納する 49 Dim document_title As String 'IEのドキュメントタイトルを格納する 50 Dim ie As InternetExplorer 'ShellWindowから見つけたIEを格納する 51 Dim clIE As New Collection 'コレクション格納用 52 53 For Each win In shs.Windows 54 'ドキュメントタイトル取得失敗を無視(処理継続)--* 55 On Error Resume Next 56 57 If TypeName(win.document) = "HTMLDocument" Then 58 document_title = "" 59 document_title = win.document.Title 60 On Error GoTo 0 61 62 '*-- タイトルで探す --* 63 Set ie = win 64 If InStr(document_title, pagetitle) > 0 Then 65 clIE.Add ie '合致したページをコレクションに格納 66 Set FindPages = clIE 67 End If 68 End If 69 Next 70 71End Function

ここまで書いてから、h.horikoshiさんの回答を見て
「目的のページ1枚だけを戻すほうがいいっぽい…」
ということに気づきましたので、もういっかい考えます。

###追加2(できた!)

VBA

1Sub entryDenpyo() 2 3 Dim sh As Object '起動中のShellWindow一式を格納する 4 Dim ie As InternetExplorer 'FindPages関数で見つけたIEを格納する 5 Dim inputbutton As HTMLAnchorElement 'ボタンとかを探すときに要素を格納する 6 Dim i As Long 'イテレータ 7 Dim endRow As Long: endRow = ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row 'Sheet1の最終行 8 9 10 '*-- 起動中のShellWindow一式を変数shに格納 --* 11 Set sh = CreateObject("Shell.Application") 12 13 '*-- IEで開かれている[伝票番号入力]ページを探す、1個だけ開かれてるんじゃなかったら処理はしない。 --* 14 Set ie = FindPages(sh,"伝票番号入力") 15 16 If (Not (ie Is Nothing)) Then 17 '*-- シートの伝票番号の数だけ繰り返す --* 18 For i = 1 To endRow Step 1 19 '*-- 伝票番号を入れて登録ボタンを押す --* 20 ie.document.getElementsByName("denpyoNo")(0).Value = ThisWorkbook.Worksheets("Sheet1").Cells(i, 1).Value 21 For Each inputbutton In ie.document.getElementsByTagName("input") 22 If inputbutton.Value = "登録" Then 23 inputbutton.Click 24 Exit For 25 End If 26 Next 27 Do While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE 28 DoEvents 29 Loop 30 Next i 31 else 32 MsgBox "登録画面がみつかりません!" 33 End If 34 35 '*-- いろいろ解放 --* 36 Set sh = Nothing 37 Set ie = Nothing 38 MsgBox "おわりました" 39 40End Sub 41 42'*-- 開いているIEのページを目的の1個だけ戻す。ページがなかったり複数だったりしたらNothingを戻す。 --* 43Function FindPages(ByVal shs As Object, ByVal pagetitle As String) As InternetExplorer 44 45 Dim win As Object '各ShellWindowを格納する 46 Dim document_title As String 'IEのドキュメントタイトルを格納する 47 Dim ie As InternetExplorer 'ShellWindowから見つけたIEを格納する 48 49 Set FindPages = Nothing 50 For Each win In shs.Windows 51 'ドキュメントタイトル取得失敗を無視(処理継続)--* 52 On Error Resume Next 53 54 If TypeName(win.document) = "HTMLDocument" Then 55 document_title = "" 56 document_title = win.document.Title 57 On Error GoTo 0 58 59 '*-- IEだったらタイトルで探す --* 60 Set ie = win 61 If InStr(document_title, pagetitle) > 0 Then 62 If FindPages Is Nothing Then 63 Set FindPages = ie 64 Else 65 MsgBox pagetitle & ("画面を1個だけ開いて、あとは閉じてください。") 66 Set FindPages = Nothing 67 Exit Function 68 End If 69 End If 70 End If 71 Next 72 73End Function

皆様のご指導のもとに、とても改善して書けました!
「開いているIEのページを目的の1個だけ戻す」というのは
他にも1件ずつエントリするような作業がいろいろありますので(社内システムがイケてないので……)
この部分を関数にできたので、使いまわせそうな気がします。

ベストアンサーっていっぱいつけられないのですね……
teratailは先生がいっぱいいるので嬉しいです!ありがとうございます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

回答5

0

同じようなコードが2回来るのってみっともなくないでしょうか

関数を作ってしまいましょう。
関数の中で多重チェックとIEウィンドウの取り出しを同時にやれば
すっきりすると思います。

VBA

1Public Function getIEWindow(ByVal title As String) As Object 2'============================================================================== 3'■getIEWindow : 開いているIEのウィンドウを返す。取得に失敗または複数起動の場合 4'はNothingを返す。複数起動の場合はメッセージが出る。 5'============================================================================== 6 Set getIEWindow = Nothing 7 8On Error Resume Next 9 Dim sh As Object: Set sh = CreateObject("Shell.Application") 10 Dim win As Object 11 For Each win In sh.Windows 12 If (TypeName(win.document) = "HTMLDocument") Then 13 If (InStr(win.document.title, title) > 0) Then 14 If (getIEWindow Is Nothing) Then ' 初出の検出 15 Set getIEWindow = win 16 Else ' 複数検出 17 MsgBox "IEは目的の1枚だけ開いておいてあとは閉じてください" 18 Set getIEWindow = Nothing 19 Exit Function 20 End If 21 End If 22 End If 23 Next 24 Set win = Nothing 25 Set sh = Nothing 26On Error GoTo 0 27 28End Function

呼び出し元

Dim ie As Object: Set ie = getIEWindow("伝票番号入力") If (Not (ie Is Nothing)) Then ...

投稿2018/03/27 07:08

h.horikoshi

総合スコア505

hatena19

2018/03/27 07:28

コレクション使うよりこの方がいいですね。 無駄がないし、すっきりします。
h.horikoshi

2018/03/29 00:30

>hatena19さん フォローありがとうございます。 自分の関数を見直してみたのですが、 呼び出し元がエラー状況を判断できないので、戻り値には処理結果の コードとかを返したほうがよさそうですね。(取得したオブジェクトは ByRefの引数に返すということで...)。
guest

0

ベストアンサー

現状ではWindow検索ループ(外側ループ)の中で目的のWindowを探し、見つけたその場で登録処理のループを行っていると思います。

①Window検索ループ ② Windowタイトル判定 ③ ⇒合致していたら登録処理(登録用の内側ループ) ④Loop Next

ここにそのまま全Windowタイトルのチェックを追加しようと考えると
>同じようなコードが2回来るのってみっともなくないでしょうか。
となってしまうと思います。

他の回答者さんからも指摘が出ているとおり、同じ処理を複数回行う必要があるのなら関数化してしまった方が機能的です。

しかし今回の場合、Window検索ループは「対象となる1Windowを見つける」ことが目的のループ処理です。
見つけたWindowに片っ端から登録処理をしたいわけではありませんので、このループ内で登録処理まで行う必要はありません。
目的のWindowさえ特定できていれば、登録はループを抜けた後でもかまわないのです。

Window検索ループはあくまで目的のWindowを見つけるためのループ処理にとどめ、対象のWindowを見つけた際には即登録ではなくオブジェクト変数に格納しておくようにします。
全てのWindowを検索し終えた後、対象が1ページだけ見つかっていた場合には、オブジェクト変数に格納しておいたページに対して登録処理を行えば無駄なコーディングが避けられると思います。

①Window検索ループ ② Windowタイトル判定 ③ ⇒見つけたページをオブジェクト変数に格納する ③ ⇒2つ目の対象Windowが見つかったタイミングでメッセージ表示&処理中断 ④Loop Next ⑤見つけたページがあれば登録処理(複数見つけた場合はこの処理までこない)

参考になれば幸いです。

投稿2018/03/28 01:04

jawa

総合スコア3021

sumire_cl

2018/03/28 02:59

どういう基準で関数化して外に出すのか という基準がいまいち理解できなくていままでテキトウにやっていたのですが そういう判断基準でわけたらいいのですね。 ありがとうございます。学びました!
jawa

2018/03/28 03:36

機能単位でみて同じ処理(似たような処理)を複数回行うのなら関数化した方がいいです。 例えば全Windowの検索ループを複数回行いたいのなら、そこを関数化してループ結果の対象ウィンドウだけ返すような関数を作った方がいいです。 同じロジックを複数個所に記述していると、片方に修正(例えばループ回数を変更したいとか)を行った場合、もう片方にも同じ修正をあてなければならないことが多いです。(ダブルメンテ) これは非常に面倒ですし、改修漏れや記述誤りの温床ともなります。なによりスマートではありません。 関数化の指標としては、大きくなりすぎる処理を関数化してコードを見やすくするというものもあると思います。 この場合、関数化することでコードはスマートになりますが、関数内で何が行われているのか、見通しは悪くなります。 今回の場合、おそらく検索ループは1回で十分ですので「繰り返し使う」という意味では関数化は必要ないでしょう。 ループ内のコードが肥大化するようであれば関数化を考えてもいいかもしれません。 ※提示いただいたくらいのボリュームなら関数化は必要なさそうですが。 やるのなら ①全ウィンドウをチェックして対象ウィンドウを返す関数 ②取得したウィンドウに登録を行う関数 という2本立てにしたらすっきりしそうですね。
guest

0

IEで登録ページはもう開いておいて、そのページを見つけて捕まえて、順に伝票番号を入力して登録するような手順です。

この、「IEで登録ページはもう開いておいて」の部分は、具体的にどういうことなのでしょう。
ユーザーが手作業で開くのでしょうか。それともVBAの別の処理で開くということでしょうか。

VBAでの自動登録ということなら、CreateObjectでIEを新規に開いて、そのIEで登録ページを開いて登録処理をすれば、既存のIEがどのページを開いていようが、関係ないと思いますが、そうできない理由はなんでしょうか。

追記

条件に合致するページが1枚だけのときに、処理を実行するということなら、
合致するページをコレクションに格納して、その件数で処理を分けたらどうでしょう。
(動的配列かDictionalyオブジェクトに格納する方法もありますが今回はコレクションで。)

vba

1 Dim win As Object '各ShellWindowを格納する 2 Dim ie As InternetExplorer 3 Dim clIE As New Collection 4 5 '*-- 起動中のShellWindow一式を変数shに格納 --* 6 Set sh = CreateObject("Shell.Application") 7 8 For Each win In sh.Windows 9 'ドキュメントタイトル取得失敗を無視(処理継続)--* 10 On Error Resume Next 11 12 If TypeName(win.document) = "HTMLDocument" Then 13 document_title = "" 14 document_title = win.document.Title 15 On Error GoTo 0 16 '*-- ページのタイトルで探す --* 17 Set ie = win 18 If InStr(document_title, "伝票番号入力") > 0 Then 19 clIE.Add IE '合致したページをコレクションに格納 20 Else 21 '*-- 画面を閉じる(登録画面以外のIE) --* 22 ie.Quit 23 End If 24 End If 25 Next 26 27 Select Case clIE.Count 28 Case 0 29 MsgBox "登録ページを開いてください。" 30 Case 1 31 Set IE = clIE(1) 32 '登録処理 33 Case Else 34 MsgBox "IEは目的の1枚だけ開いておいてあとは閉じてください" 35 'ここでコレクション内のページを閉じる処理をいれるのもあり 36 End Select

投稿2018/03/27 05:33

編集2018/03/27 06:59
hatena19

総合スコア34377

sumire_cl

2018/03/27 05:36

ユーザが手作業で開くのです。 その伝票登録のページに入る前に各自ログインをしないといけないので そこは各自手でやっておきたい、というご希望なのだそうです。 ExcelのほうにID/PWをもっておいてログインから自動でやったらいいじゃんと思うのですが それはダメなんだそうです…
hatena19

2018/03/27 06:15

ExcelのほうにID/PWを保存しておくのがセキュリティ上ダメというのは分かります。 ならば、ユーザーフォームで ID/PW を入力してもらって、それでログインして自動処理ではだめなんでしょうかね。
hatena19

2018/03/27 06:28

> 同じ名前のウィンドウが複数開いていると、目的のと違うウィンドウを捕まえてしまうことが多く…… この部分も、ちょっと疑問です。 コードを見てみると、ページのタイトルを部分一致で判定していますが、 もっと厳密に目的のウィンドウかどうかを判定することはできないのてしょうか。 タイトルの完全一致で判定とか、ページ内の要素を判定材料にするとか。
sumire_cl

2018/03/28 01:55

これはですね 同じ伝票入力ページを複数開いている人がいるのが原因です。 伝票入力ページに伝票番号を入れて登録はしないでそのまま開きっぱなしにして また別のタブで伝票番号入力ページを開いて…ということをしていて このツールが、その開きっぱなしで放置されているページを誤って捕まえてしまい 「せっかく入力しておいた伝票番号を『潰された』」というクレームが出るのです。 知らないよそんなの!中途半端で放置してるのが悪いんじゃん!バカ!せっかくとか言ってるけど単に忘れてただけでしょ! と思うのですが、私のできることは「開くのは1枚だけにしてください」と都度お願いすることだけなのです。
hatena19

2018/03/28 02:19

なるほど、ご苦労、お察しします。 ちょっと気になったのは、質問の一番最初のコードでは、登録画面以外のページは強制的に閉じてますが、これはクレームは来ないのでしょうか。
sumire_cl

2018/03/28 02:55

来ました…( ˘•ω•˘ ) 余計なページを開かないでって言ってるんだからいいじゃんと安直に閉じる処理を入れたら怒られました…。なので外しました。
guest

0

ループ内に処理を突っ込んでいますが、このような時にはループを外に出しましょう。

まず目的のページを見つけるためだけの関数を作ります。
この関数を仮に FindPages と名付けます。
その中ではまず空の配列を作り、次いでループを使って見つかったページを配列に追加します。
ループ終了したら作った配列を戻り値として返します。

呼び出し側はまず FindPages を呼び出して配列を取得します。
その配列の要素数が 0 であったらページが開かれていないのでエラー処理をします。
2 以上なら複数開かれているのでエラー処理をします。
1 なら該当ページは一つだけ開かれているので、そのページに対して処理をします。

投稿2018/03/27 05:20

Zuishin

総合スコア28675

sumire_cl

2018/03/27 05:33

2個目に書いたぶんのfor-next部分のロジックを「FindPages関数」として作っておく、という感じで 私の認識はあっていますでしょうか?
Zuishin

2018/03/27 05:44

一つ目です。 開いているウィンドウを見つける関数です。
sumire_cl

2018/03/27 08:26

Sub entryDenpyo() Dim sh As Object '起動中のShellWindow一式を格納する Dim win As Object '各ShellWindowを格納する Dim ie As InternetExplorer 'ShellWindowから見つけたIEを格納する Dim document_title As String 'IEのドキュメントタイトルを格納する Dim inputbutton As HTMLAnchorElement 'ボタンとかを探すときに要素を格納する Dim i As Long 'イテレータ Dim endRow As Long: endRow = ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row 'Sheet1の最終行 '*-- 起動中のShellWindow一式を変数shに格納 --* Set sh = CreateObject("Shell.Application") MsgBox sh.Windows.Count Set win = FindPages(sh) If win.Count = 1 Then Set ie = win(1) Else MsgBox ("伝票番号入力画面を1個だけ開いて、あとは閉じてください。") Exit Sub End If '*-- シートの伝票番号の数だけ繰り返す --* For i = 1 To endRow Step 1 '*-- 伝票番号を入れて登録ボタンを押す --* ie.document.getElementsByName("denpyoNo")(0).Value = ThisWorkbook.Worksheets("Sheet1").Cells(i, 1).Value For Each inputbutton In ie.document.getElementsByTagName("input") If inputbutton.Value = "登録" Then inputbutton.Click Exit For End If Next Do While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE DoEvents Loop Next i '*-- いろいろ解放 --* Set sh = Nothing Set ie = Nothing End Sub Function FindPages(ByVal shs As Object) As Collection Dim win As Object '各ShellWindowを格納する Dim document_title As String 'IEのドキュメントタイトルを格納する Dim ie As InternetExplorer 'ShellWindowから見つけたIEを格納する Dim clIE As New Collection For Each win In shs.Windows 'ドキュメントタイトル取得失敗を無視(処理継続)--* On Error Resume Next If TypeName(win.document) = "HTMLDocument" Then document_title = "" document_title = win.document.Title On Error GoTo 0 '*-- タイトルで探す --* Set ie = win If InStr(document_title, "伝票番号入力") > 0 Then clIE.Add ie '合致したページをコレクションに格納 Set FindPages = clIE End If End If Next End Function こんなかんじですか?(むつかしい…) そして、こういうときにコードはここに書けばよいのでしょうか? もっと適切な書く場所があったらごめんなさい…
Zuishin

2018/03/27 08:38

質問を編集して追記という形にすればいいと思います。 コメントを流し読みだけしましたが、流れは合ってると思うので実際にやってみてから追記してください。 アルゴリズムの説明は足りましたか? 理解できたなら実装は難しくないはずですが。
sumire_cl

2018/03/28 02:02

足りました! 追記もしてみました。 こうやって追記すればいいんですね。ありがとうございます。
guest

0

オペレーション的には、最初にIEが開いているかチェックして、1枚でも開いていたら「閉じます」のメッセージの後すべて自動的に閉じてから処理を開始するほうがわかりやすいような気がします。
できるのかはわかりませんが、とりあえず仕様的観点からの回答でした。

投稿2018/03/27 04:52

ttyp03

総合スコア17002

sumire_cl

2018/03/27 05:30

ありがとうございます。 私も全部閉じてから新規に開いてログインから開始って感じにしたかったのですが ログインは各自でやっておきたいというご希望でしたので そこのところは抵抗できず…( ˘•ω•˘ )
ttyp03

2018/03/27 05:32

お客さん都合なんですね。 心中お察しします。
sumire_cl

2018/03/27 05:34

ありがとうございます… 現場のかたのこだわりってよくわかんなくてむつかしいですね…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問